[{"data":1,"prerenderedAt":1976},["ShallowReactive",2],{"navigation_docs":3,"-form-reference-configuration-commands":82,"-form-reference-configuration-commands-surround":1971},[4],{"title":5,"path":6,"stem":7,"children":8,"page":25},"Form","\u002Fform","1.getting-started",[9,26,58],{"title":10,"path":11,"stem":12,"children":13,"page":25},"Getting Started","\u002Fform\u002Fgetting-started","1.getting-started\u002F1.installation",[14,17,21],{"title":15,"path":16,"stem":12},"Installation","\u002Fform\u002Fgetting-started\u002Finstallation",{"title":18,"path":19,"stem":20},"Your first form","\u002Fform\u002Fgetting-started\u002Ffirst-form","1.getting-started\u002F2.first-form",{"title":22,"path":23,"stem":24},"Vue rendering","\u002Fform\u002Fgetting-started\u002Fvue-rendering","1.getting-started\u002F3.vue-rendering",false,{"title":27,"path":28,"stem":29,"children":30,"page":25},"Guide","\u002Fform\u002Fguide","2.guide\u002F1.forms-data-validation",[31,34,38,42,46,50,54],{"title":32,"path":33,"stem":29},"Forms, data, and validation","\u002Fform\u002Fguide\u002Fforms-data-validation",{"title":35,"path":36,"stem":37},"Fields and visibility","\u002Fform\u002Fguide\u002Ffields-visibility","2.guide\u002F2.fields-visibility",{"title":39,"path":40,"stem":41},"Renderers and composables","\u002Fform\u002Fguide\u002Frenderers-composables","2.guide\u002F3.renderers-composables",{"title":43,"path":44,"stem":45},"Collections and wizards","\u002Fform\u002Fguide\u002Fcollections-wizards","2.guide\u002F4.collections-wizards",{"title":47,"path":48,"stem":49},"Comboboxes","\u002Fform\u002Fguide\u002Fcomboboxes","2.guide\u002F5.comboboxes",{"title":51,"path":52,"stem":53},"Uploads","\u002Fform\u002Fguide\u002Fuploads","2.guide\u002F6.uploads",{"title":55,"path":56,"stem":57},"Composer and rich text","\u002Fform\u002Fguide\u002Fcomposer-rich-text","2.guide\u002F7.composer-rich-text",{"title":59,"path":60,"stem":61,"children":62,"page":25},"Reference","\u002Fform\u002Freference","3.reference\u002F1.fields",[63,66,70,74,78],{"title":64,"path":65,"stem":61},"Fields","\u002Fform\u002Freference\u002Ffields",{"title":67,"path":68,"stem":69},"PHP API","\u002Fform\u002Freference\u002Fphp-api","3.reference\u002F2.php-api",{"title":71,"path":72,"stem":73},"Vue API","\u002Fform\u002Freference\u002Fvue-api","3.reference\u002F3.vue-api",{"title":75,"path":76,"stem":77},"Configuration and commands","\u002Fform\u002Freference\u002Fconfiguration-commands","3.reference\u002F4.configuration-commands",{"title":79,"path":80,"stem":81},"Resource shape","\u002Fform\u002Freference\u002Fresource-shape","3.reference\u002F5.resource-shape",{"id":83,"title":75,"body":84,"description":1965,"extension":1966,"links":1967,"meta":1968,"navigation":585,"path":76,"seo":1969,"stem":77,"__hash__":1970},"docs\u002Fform\u002F3.reference\u002F4.configuration-commands.md",{"type":85,"value":86,"toc":1950},"minimark",[87,91,96,104,132,143,147,154,428,449,453,458,928,931,935,938,992,995,1092,1095,1138,1142,1145,1414,1420,1424,1428,1431,1449,1480,1483,1747,1751,1755,1772,1783,1787,1801,1804,1821,1827,1846,1849,1906,1909,1913,1926,1943,1946],[88,89,90],"p",{},"The service provider is discovered by Laravel. It always merges package configuration and registers macros and commands, but it never registers upload routes automatically.",[92,93,95],"h2",{"id":94},"publish-configuration","Publish configuration",[88,97,98,99,103],{},"Publish ",[100,101,102],"code",{},"config\u002Finertia-forms.php"," only when the defaults need to change:",[105,106,111],"pre",{"className":107,"code":108,"language":109,"meta":110,"style":110},"language-bash shiki shiki-themes material-theme-lighter catppuccin-mocha catppuccin-mocha","php artisan vendor:publish --tag=inertia-forms-config\n","bash","",[100,112,113],{"__ignoreMap":110},[114,115,118,122,126,129],"span",{"class":116,"line":117},"line",1,[114,119,121],{"class":120},"slOSs","php",[114,123,125],{"class":124},"s2lAL"," artisan",[114,127,128],{"class":124}," vendor:publish",[114,130,131],{"class":124}," --tag=inertia-forms-config\n",[88,133,134,135,138,139,142],{},"The aliases ",[100,136,137],{},"inertify-form-config"," and ",[100,140,141],{},"inertify-form"," publish the same file.",[92,144,146],{"id":145},"configuration-reference","Configuration reference",[88,148,149,150,153],{},"All keys live below ",[100,151,152],{},"inertia-forms",".",[155,156,157,177],"table",{},[158,159,160],"thead",{},[161,162,163,167,171,174],"tr",{},[164,165,166],"th",{},"Key",[164,168,170],{"align":169},"right","Default",[164,172,173],{},"Unit",[164,175,176],{},"Purpose",[178,179,180,199,216,233,253,271,289,307,324,344,361,378,395,411],"tbody",{},[161,181,182,188,193,196],{},[183,184,185],"td",{},[100,186,187],{},"file_uploads.route_prefix",[183,189,190],{"align":169},[100,191,192],{},"\u002F_inertia-forms",[183,194,195],{},"—",[183,197,198],{},"URL prefix used when upload routes are registered.",[161,200,201,206,211,213],{},[183,202,203],{},[100,204,205],{},"file_uploads.route_name",[183,207,208],{"align":169},[100,209,210],{},"inertia-forms.",[183,212,195],{},[183,214,215],{},"Route-name prefix. A trailing dot is normalized automatically.",[161,217,218,223,228,230],{},[183,219,220],{},[100,221,222],{},"file_uploads.middleware",[183,224,225],{"align":169},[100,226,227],{},"['web', 'auth']",[183,229,195],{},[183,231,232],{},"Middleware applied to the complete upload route group.",[161,234,235,240,245,247],{},[183,236,237],{},[100,238,239],{},"file_uploads.temporary_uploads.disk",[183,241,242],{"align":169},[100,243,244],{},"''",[183,246,195],{},[183,248,249,250,153],{},"Laravel filesystem disk for temporary and chunked content. Empty uses an isolated local directory at ",[100,251,252],{},"storage\u002Finertia-forms-temporary-uploads",[161,254,255,260,265,268],{},[183,256,257],{},[100,258,259],{},"file_uploads.temporary_uploads.lifetime",[183,261,262],{"align":169},[100,263,264],{},"3600",[183,266,267],{},"seconds",[183,269,270],{},"Token lifetime and the normal temporary cleanup age.",[161,272,273,278,283,286],{},[183,274,275],{},[100,276,277],{},"file_uploads.temporary_uploads.max_size",[183,279,280],{"align":169},[100,281,282],{},"10240",[183,284,285],{},"KiB",[183,287,288],{},"Maximum normal temporary upload size before field-specific constraints.",[161,290,291,296,301,304],{},[183,292,293],{},[100,294,295],{},"file_uploads.temporary_uploads.chunked.size",[183,297,298],{"align":169},[100,299,300],{},"5242880",[183,302,303],{},"bytes",[183,305,306],{},"Default client chunk size.",[161,308,309,314,319,321],{},[183,310,311],{},[100,312,313],{},"file_uploads.temporary_uploads.chunked.max_size",[183,315,316],{"align":169},[100,317,318],{},"2097152",[183,320,285],{},[183,322,323],{},"Maximum completed chunked upload size.",[161,325,326,331,335,337],{},[183,327,328],{},[100,329,330],{},"file_uploads.direct_to_storage.disk",[183,332,333],{"align":169},[100,334,244],{},[183,336,195],{},[183,338,339,340,343],{},"Default filesystem disk for direct uploads. Empty requires a disk on each direct ",[100,341,342],{},"File"," field.",[161,345,346,351,356,358],{},[183,347,348],{},[100,349,350],{},"file_uploads.direct_to_storage.url_lifetime",[183,352,353],{"align":169},[100,354,355],{},"900",[183,357,267],{},[183,359,360],{},"Lifetime for a direct-upload session or signed upload URL.",[161,362,363,368,373,375],{},[183,364,365],{},[100,366,367],{},"file_uploads.direct_to_storage.part_size",[183,369,370],{"align":169},[100,371,372],{},"16777216",[183,374,303],{},[183,376,377],{},"Multipart part size. S3 requires every non-final part to be at least 5 MiB.",[161,379,380,385,390,392],{},[183,381,382],{},[100,383,384],{},"file_uploads.direct_to_storage.multipart_threshold",[183,386,387],{"align":169},[100,388,389],{},"104857600",[183,391,303],{},[183,393,394],{},"Files larger than this use multipart direct upload.",[161,396,397,402,406,408],{},[183,398,399],{},[100,400,401],{},"file_uploads.direct_to_storage.max_size",[183,403,404],{"align":169},[100,405,300],{},[183,407,285],{},[183,409,410],{},"Maximum direct upload size before field-specific constraints.",[161,412,413,418,423,425],{},[183,414,415],{},[100,416,417],{},"authorization.throw_on_unauthorized",[183,419,420],{"align":169},[100,421,422],{},"false",[183,424,195],{},[183,426,427],{},"Throw during serialization instead of returning an empty form resource. Validation always throws for an unauthorized form.",[88,429,430,431,434,435,434,438,434,441,444,445,448],{},"Field methods such as ",[100,432,433],{},"maxSize()",", ",[100,436,437],{},"chunked($bytes)",[100,439,440],{},"directToStorage($disk)",[100,442,443],{},"partSize()",", and ",[100,446,447],{},"multipartThreshold()"," override the corresponding serialized transport settings for that field.",[450,451,452],"note",{},"File validation sizes follow Laravel's file-rule convention and are expressed in KiB. Chunk and multipart transport sizes are bytes.",[454,455,457],"h3",{"id":456},"example-production-configuration","Example production configuration",[105,459,462],{"className":460,"code":461,"language":121,"meta":110,"style":110},"language-php shiki shiki-themes material-theme-lighter catppuccin-mocha catppuccin-mocha","return [\n    'file_uploads' => [\n        'route_prefix' => '\u002F_inertia-forms',\n        'route_name' => 'inertia-forms.',\n        'middleware' => ['web', 'auth', 'throttle:uploads'],\n\n        'temporary_uploads' => [\n            'disk' => 'private',\n            'lifetime' => 3600,\n            'max_size' => 10 * 1024,\n            'chunked' => [\n                'size' => 5 * 1024 * 1024,\n                'max_size' => 2 * 1024 * 1024,\n            ],\n        ],\n\n        'direct_to_storage' => [\n            'disk' => 's3',\n            'url_lifetime' => 900,\n            'part_size' => 16 * 1024 * 1024,\n            'multipart_threshold' => 100 * 1024 * 1024,\n            'max_size' => 5 * 1024 * 1024,\n        ],\n    ],\n\n    'authorization' => [\n        'throw_on_unauthorized' => true,\n    ],\n];\n",[100,463,464,474,493,516,536,580,587,601,623,641,664,678,704,728,734,740,745,759,779,796,821,846,869,874,880,885,899,917,922],{"__ignoreMap":110},[114,465,466,470],{"class":116,"line":117},[114,467,469],{"class":468},"su_vF","return",[114,471,473],{"class":472},"sOG8g"," [\n",[114,475,477,481,484,487,491],{"class":116,"line":476},2,[114,478,480],{"class":479},"sQGZM","    '",[114,482,483],{"class":124},"file_uploads",[114,485,486],{"class":479},"'",[114,488,490],{"class":489},"sWTNM"," =>",[114,492,473],{"class":472},[114,494,496,499,502,504,506,509,511,513],{"class":116,"line":495},3,[114,497,498],{"class":479},"        '",[114,500,501],{"class":124},"route_prefix",[114,503,486],{"class":479},[114,505,490],{"class":489},[114,507,508],{"class":479}," '",[114,510,192],{"class":124},[114,512,486],{"class":479},[114,514,515],{"class":472},",\n",[114,517,519,521,524,526,528,530,532,534],{"class":116,"line":518},4,[114,520,498],{"class":479},[114,522,523],{"class":124},"route_name",[114,525,486],{"class":479},[114,527,490],{"class":489},[114,529,508],{"class":479},[114,531,210],{"class":124},[114,533,486],{"class":479},[114,535,515],{"class":472},[114,537,539,541,544,546,548,551,553,556,558,561,563,566,568,570,572,575,577],{"class":116,"line":538},5,[114,540,498],{"class":479},[114,542,543],{"class":124},"middleware",[114,545,486],{"class":479},[114,547,490],{"class":489},[114,549,550],{"class":472}," [",[114,552,486],{"class":479},[114,554,555],{"class":124},"web",[114,557,486],{"class":479},[114,559,560],{"class":472},",",[114,562,508],{"class":479},[114,564,565],{"class":124},"auth",[114,567,486],{"class":479},[114,569,560],{"class":472},[114,571,508],{"class":479},[114,573,574],{"class":124},"throttle:uploads",[114,576,486],{"class":479},[114,578,579],{"class":472},"],\n",[114,581,583],{"class":116,"line":582},6,[114,584,586],{"emptyLinePlaceholder":585},true,"\n",[114,588,590,592,595,597,599],{"class":116,"line":589},7,[114,591,498],{"class":479},[114,593,594],{"class":124},"temporary_uploads",[114,596,486],{"class":479},[114,598,490],{"class":489},[114,600,473],{"class":472},[114,602,604,607,610,612,614,616,619,621],{"class":116,"line":603},8,[114,605,606],{"class":479},"            '",[114,608,609],{"class":124},"disk",[114,611,486],{"class":479},[114,613,490],{"class":489},[114,615,508],{"class":479},[114,617,618],{"class":124},"private",[114,620,486],{"class":479},[114,622,515],{"class":472},[114,624,626,628,631,633,635,639],{"class":116,"line":625},9,[114,627,606],{"class":479},[114,629,630],{"class":124},"lifetime",[114,632,486],{"class":479},[114,634,490],{"class":489},[114,636,638],{"class":637},"sCOdc"," 3600",[114,640,515],{"class":472},[114,642,644,646,649,651,653,656,659,662],{"class":116,"line":643},10,[114,645,606],{"class":479},[114,647,648],{"class":124},"max_size",[114,650,486],{"class":479},[114,652,490],{"class":489},[114,654,655],{"class":637}," 10",[114,657,658],{"class":489}," *",[114,660,661],{"class":637}," 1024",[114,663,515],{"class":472},[114,665,667,669,672,674,676],{"class":116,"line":666},11,[114,668,606],{"class":479},[114,670,671],{"class":124},"chunked",[114,673,486],{"class":479},[114,675,490],{"class":489},[114,677,473],{"class":472},[114,679,681,684,687,689,691,694,696,698,700,702],{"class":116,"line":680},12,[114,682,683],{"class":479},"                '",[114,685,686],{"class":124},"size",[114,688,486],{"class":479},[114,690,490],{"class":489},[114,692,693],{"class":637}," 5",[114,695,658],{"class":489},[114,697,661],{"class":637},[114,699,658],{"class":489},[114,701,661],{"class":637},[114,703,515],{"class":472},[114,705,707,709,711,713,715,718,720,722,724,726],{"class":116,"line":706},13,[114,708,683],{"class":479},[114,710,648],{"class":124},[114,712,486],{"class":479},[114,714,490],{"class":489},[114,716,717],{"class":637}," 2",[114,719,658],{"class":489},[114,721,661],{"class":637},[114,723,658],{"class":489},[114,725,661],{"class":637},[114,727,515],{"class":472},[114,729,731],{"class":116,"line":730},14,[114,732,733],{"class":472},"            ],\n",[114,735,737],{"class":116,"line":736},15,[114,738,739],{"class":472},"        ],\n",[114,741,743],{"class":116,"line":742},16,[114,744,586],{"emptyLinePlaceholder":585},[114,746,748,750,753,755,757],{"class":116,"line":747},17,[114,749,498],{"class":479},[114,751,752],{"class":124},"direct_to_storage",[114,754,486],{"class":479},[114,756,490],{"class":489},[114,758,473],{"class":472},[114,760,762,764,766,768,770,772,775,777],{"class":116,"line":761},18,[114,763,606],{"class":479},[114,765,609],{"class":124},[114,767,486],{"class":479},[114,769,490],{"class":489},[114,771,508],{"class":479},[114,773,774],{"class":124},"s3",[114,776,486],{"class":479},[114,778,515],{"class":472},[114,780,782,784,787,789,791,794],{"class":116,"line":781},19,[114,783,606],{"class":479},[114,785,786],{"class":124},"url_lifetime",[114,788,486],{"class":479},[114,790,490],{"class":489},[114,792,793],{"class":637}," 900",[114,795,515],{"class":472},[114,797,799,801,804,806,808,811,813,815,817,819],{"class":116,"line":798},20,[114,800,606],{"class":479},[114,802,803],{"class":124},"part_size",[114,805,486],{"class":479},[114,807,490],{"class":489},[114,809,810],{"class":637}," 16",[114,812,658],{"class":489},[114,814,661],{"class":637},[114,816,658],{"class":489},[114,818,661],{"class":637},[114,820,515],{"class":472},[114,822,824,826,829,831,833,836,838,840,842,844],{"class":116,"line":823},21,[114,825,606],{"class":479},[114,827,828],{"class":124},"multipart_threshold",[114,830,486],{"class":479},[114,832,490],{"class":489},[114,834,835],{"class":637}," 100",[114,837,658],{"class":489},[114,839,661],{"class":637},[114,841,658],{"class":489},[114,843,661],{"class":637},[114,845,515],{"class":472},[114,847,849,851,853,855,857,859,861,863,865,867],{"class":116,"line":848},22,[114,850,606],{"class":479},[114,852,648],{"class":124},[114,854,486],{"class":479},[114,856,490],{"class":489},[114,858,693],{"class":637},[114,860,658],{"class":489},[114,862,661],{"class":637},[114,864,658],{"class":489},[114,866,661],{"class":637},[114,868,515],{"class":472},[114,870,872],{"class":116,"line":871},23,[114,873,739],{"class":472},[114,875,877],{"class":116,"line":876},24,[114,878,879],{"class":472},"    ],\n",[114,881,883],{"class":116,"line":882},25,[114,884,586],{"emptyLinePlaceholder":585},[114,886,888,890,893,895,897],{"class":116,"line":887},26,[114,889,480],{"class":479},[114,891,892],{"class":124},"authorization",[114,894,486],{"class":479},[114,896,490],{"class":489},[114,898,473],{"class":472},[114,900,902,904,907,909,911,915],{"class":116,"line":901},27,[114,903,498],{"class":479},[114,905,906],{"class":124},"throw_on_unauthorized",[114,908,486],{"class":479},[114,910,490],{"class":489},[114,912,914],{"class":913},"s27pR"," true",[114,916,515],{"class":472},[114,918,920],{"class":116,"line":919},28,[114,921,879],{"class":472},[114,923,925],{"class":116,"line":924},29,[114,926,927],{"class":472},"];\n",[88,929,930],{},"Choose disks and limits for the host application. The example values are not a substitute for application-specific storage, cost, retention, or abuse controls.",[92,932,934],{"id":933},"upload-routes","Upload routes",[88,936,937],{},"Register the endpoints explicitly in an application route file:",[105,939,941],{"className":460,"code":940,"language":121,"meta":110,"style":110},"use Illuminate\\Support\\Facades\\Route;\n\nRoute::inertiaFormUploads();\n",[100,942,943,973,977],{"__ignoreMap":110},[114,944,945,949,953,956,959,961,964,966,970],{"class":116,"line":117},[114,946,948],{"class":947},"scOca","use",[114,950,952],{"class":951},"svMjs"," Illuminate",[114,954,955],{"class":472},"\\",[114,957,958],{"class":951},"Support",[114,960,955],{"class":472},[114,962,963],{"class":951},"Facades",[114,965,955],{"class":472},[114,967,969],{"class":968},"spKqO","Route",[114,971,972],{"class":472},";\n",[114,974,975],{"class":116,"line":476},[114,976,586],{"emptyLinePlaceholder":585},[114,978,979,982,985,989],{"class":116,"line":495},[114,980,969],{"class":981},"s6-7G",[114,983,984],{"class":489},"::",[114,986,988],{"class":987},"sgeHj","inertiaFormUploads",[114,990,991],{"class":472},"();\n",[88,993,994],{},"Override the group settings with named arguments:",[105,996,998],{"className":460,"code":997,"language":121,"meta":110,"style":110},"Route::inertiaFormUploads(\n    prefix: '\u002Fform-assets',\n    middleware: ['web', 'auth', 'verified', 'throttle:uploads'],\n    name: 'form-assets',\n);\n",[100,999,1000,1011,1029,1071,1087],{"__ignoreMap":110},[114,1001,1002,1004,1006,1008],{"class":116,"line":117},[114,1003,969],{"class":981},[114,1005,984],{"class":489},[114,1007,988],{"class":987},[114,1009,1010],{"class":472},"(\n",[114,1012,1013,1017,1020,1022,1025,1027],{"class":116,"line":476},[114,1014,1016],{"class":1015},"sRLcR","    prefix",[114,1018,1019],{"class":472},":",[114,1021,508],{"class":479},[114,1023,1024],{"class":124},"\u002Fform-assets",[114,1026,486],{"class":479},[114,1028,515],{"class":472},[114,1030,1031,1034,1036,1038,1040,1042,1044,1046,1048,1050,1052,1054,1056,1059,1061,1063,1065,1067,1069],{"class":116,"line":495},[114,1032,1033],{"class":1015},"    middleware",[114,1035,1019],{"class":472},[114,1037,550],{"class":472},[114,1039,486],{"class":479},[114,1041,555],{"class":124},[114,1043,486],{"class":479},[114,1045,560],{"class":472},[114,1047,508],{"class":479},[114,1049,565],{"class":124},[114,1051,486],{"class":479},[114,1053,560],{"class":472},[114,1055,508],{"class":479},[114,1057,1058],{"class":124},"verified",[114,1060,486],{"class":479},[114,1062,560],{"class":472},[114,1064,508],{"class":479},[114,1066,574],{"class":124},[114,1068,486],{"class":479},[114,1070,579],{"class":472},[114,1072,1073,1076,1078,1080,1083,1085],{"class":116,"line":518},[114,1074,1075],{"class":1015},"    name",[114,1077,1019],{"class":472},[114,1079,508],{"class":479},[114,1081,1082],{"class":124},"form-assets",[114,1084,486],{"class":479},[114,1086,515],{"class":472},[114,1088,1089],{"class":116,"line":538},[114,1090,1091],{"class":472},");\n",[88,1093,1094],{},"For a route-name override, point fields at the same name prefix:",[105,1096,1098],{"className":460,"code":1097,"language":121,"meta":110,"style":110},"File::make('avatar')->uploadRoutes('form-assets');\n",[100,1099,1100],{"__ignoreMap":110},[114,1101,1102,1104,1106,1109,1112,1114,1117,1119,1122,1125,1128,1130,1132,1134,1136],{"class":116,"line":117},[114,1103,342],{"class":981},[114,1105,984],{"class":489},[114,1107,1108],{"class":987},"make",[114,1110,1111],{"class":472},"(",[114,1113,486],{"class":479},[114,1115,1116],{"class":124},"avatar",[114,1118,486],{"class":479},[114,1120,1121],{"class":472},")",[114,1123,1124],{"class":489},"->",[114,1126,1127],{"class":987},"uploadRoutes",[114,1129,1111],{"class":472},[114,1131,486],{"class":479},[114,1133,1082],{"class":124},[114,1135,486],{"class":479},[114,1137,1091],{"class":472},[454,1139,1141],{"id":1140},"registered-endpoints","Registered endpoints",[88,1143,1144],{},"Paths below are relative to the configured prefix. Names below are relative to the configured name prefix.",[155,1146,1147,1162],{},[158,1148,1149],{},[161,1150,1151,1154,1157,1160],{},[164,1152,1153],{},"Verb",[164,1155,1156],{},"Path",[164,1158,1159],{},"Route name suffix",[164,1161,176],{},[178,1163,1164,1184,1203,1222,1242,1261,1280,1299,1318,1338,1357,1376,1395],{},[161,1165,1166,1171,1176,1181],{},[183,1167,1168],{},[100,1169,1170],{},"POST",[183,1172,1173],{},[100,1174,1175],{},"file-upload",[183,1177,1178],{},[100,1179,1180],{},"file-upload.store",[183,1182,1183],{},"Store a temporary upload.",[161,1185,1186,1191,1195,1200],{},[183,1187,1188],{},[100,1189,1190],{},"DELETE",[183,1192,1193],{},[100,1194,1175],{},[183,1196,1197],{},[100,1198,1199],{},"file-upload.destroy",[183,1201,1202],{},"Remove an unused upload token.",[161,1204,1205,1209,1214,1219],{},[183,1206,1207],{},[100,1208,1170],{},[183,1210,1211],{},[100,1212,1213],{},"file-upload\u002Fchunked\u002Fstart",[183,1215,1216],{},[100,1217,1218],{},"file-upload.chunked.start",[183,1220,1221],{},"Create a resumable chunk session.",[161,1223,1224,1229,1234,1239],{},[183,1225,1226],{},[100,1227,1228],{},"GET",[183,1230,1231],{},[100,1232,1233],{},"file-upload\u002Fchunked\u002Fstatus",[183,1235,1236],{},[100,1237,1238],{},"file-upload.chunked.status",[183,1240,1241],{},"Read the accepted byte offset.",[161,1243,1244,1248,1253,1258],{},[183,1245,1246],{},[100,1247,1170],{},[183,1249,1250],{},[100,1251,1252],{},"file-upload\u002Fchunked\u002Fchunk",[183,1254,1255],{},[100,1256,1257],{},"file-upload.chunked.append",[183,1259,1260],{},"Append the next chunk.",[161,1262,1263,1267,1272,1277],{},[183,1264,1265],{},[100,1266,1170],{},[183,1268,1269],{},[100,1270,1271],{},"file-upload\u002Fchunked\u002Fcomplete",[183,1273,1274],{},[100,1275,1276],{},"file-upload.chunked.complete",[183,1278,1279],{},"Validate and finalize chunked content.",[161,1281,1282,1286,1291,1296],{},[183,1283,1284],{},[100,1285,1190],{},[183,1287,1288],{},[100,1289,1290],{},"file-upload\u002Fchunked\u002Fabort",[183,1292,1293],{},[100,1294,1295],{},"file-upload.chunked.abort",[183,1297,1298],{},"Abort a chunk session.",[161,1300,1301,1305,1310,1315],{},[183,1302,1303],{},[100,1304,1170],{},[183,1306,1307],{},[100,1308,1309],{},"file-upload\u002Fdirect\u002Fstart",[183,1311,1312],{},[100,1313,1314],{},"file-upload.direct.start",[183,1316,1317],{},"Create a direct or multipart session.",[161,1319,1320,1325,1330,1335],{},[183,1321,1322],{},[100,1323,1324],{},"PUT",[183,1326,1327],{},[100,1328,1329],{},"file-upload\u002Fdirect\u002Fobject",[183,1331,1332],{},[100,1333,1334],{},"file-upload.direct.object",[183,1336,1337],{},"Local-disk direct-upload fallback.",[161,1339,1340,1344,1349,1354],{},[183,1341,1342],{},[100,1343,1170],{},[183,1345,1346],{},[100,1347,1348],{},"file-upload\u002Fdirect\u002Fpart",[183,1350,1351],{},[100,1352,1353],{},"file-upload.direct.part",[183,1355,1356],{},"Sign an S3 multipart part or upload a local fallback part.",[161,1358,1359,1363,1368,1373],{},[183,1360,1361],{},[100,1362,1228],{},[183,1364,1365],{},[100,1366,1367],{},"file-upload\u002Fdirect\u002Fstatus",[183,1369,1370],{},[100,1371,1372],{},"file-upload.direct.status",[183,1374,1375],{},"Read direct-upload progress.",[161,1377,1378,1382,1387,1392],{},[183,1379,1380],{},[100,1381,1170],{},[183,1383,1384],{},[100,1385,1386],{},"file-upload\u002Fdirect\u002Fcomplete",[183,1388,1389],{},[100,1390,1391],{},"file-upload.direct.complete",[183,1393,1394],{},"Finalize direct content and return a submission token.",[161,1396,1397,1401,1406,1411],{},[183,1398,1399],{},[100,1400,1190],{},[183,1402,1403],{},[100,1404,1405],{},"file-upload\u002Fdirect\u002Fabort",[183,1407,1408],{},[100,1409,1410],{},"file-upload.direct.abort",[183,1412,1413],{},"Abort a direct session.",[88,1415,1416,1419],{},[100,1417,1418],{},"storeWithForm()"," does not need package upload routes. A complete custom upload descriptor can also use application-owned endpoints.",[454,1421,1423],{"id":1422},"route-security","Route security",[1425,1426,1427],"warning",{},"Upload endpoints allocate storage. Keep authentication in place and add application authorization, tenant scope, CSRF protection, and rate limiting appropriate to the deployment. Replacing the default middleware with an empty list exposes every registered upload endpoint.",[88,1429,1430],{},"The package encrypts and expires upload tokens, restricts direct uploads to the signed disk profile, validates declared sizes, and rejects malformed, expired, purpose-mismatched, disk-mismatched, and rule-profile-mismatched tokens. These protections complement rather than replace application access control.",[88,1432,1433,1434,434,1437,434,1440,434,1443,444,1445,1448],{},"File methods such as ",[100,1435,1436],{},"image()",[100,1438,1439],{},"accept()",[100,1441,1442],{},"minSize()",[100,1444,433],{},[100,1446,1447],{},"dimensions()"," become an encrypted validation profile for package-managed uploads. To require a profile even without those constraints, use:",[105,1450,1452],{"className":460,"code":1451,"language":121,"meta":110,"style":110},"File::make('document')->requireValidatedUploads();\n",[100,1453,1454],{"__ignoreMap":110},[114,1455,1456,1458,1460,1462,1464,1466,1469,1471,1473,1475,1478],{"class":116,"line":117},[114,1457,342],{"class":981},[114,1459,984],{"class":489},[114,1461,1108],{"class":987},[114,1463,1111],{"class":472},[114,1465,486],{"class":479},[114,1467,1468],{"class":124},"document",[114,1470,486],{"class":479},[114,1472,1121],{"class":472},[114,1474,1124],{"class":489},[114,1476,1477],{"class":987},"requireValidatedUploads",[114,1479,991],{"class":472},[88,1481,1482],{},"Add application-specific content checks with a container-resolved validator class:",[105,1484,1486],{"className":460,"code":1485,"language":121,"meta":110,"style":110},"use Illuminate\\Http\\Request;\nuse Illuminate\\Http\\UploadedFile;\nuse Inertify\\Form\\Contracts\\ValidatesFileUploads;\nuse Inertify\\Form\\Uploads\\TemporaryUpload;\nuse Inertify\\Form\\Uploads\\UploadRules;\n\nfinal class ScanDocumentUpload implements ValidatesFileUploads\n{\n    public function validate(\n        TemporaryUpload $upload,\n        UploadedFile $file,\n        UploadRules $rules,\n        Request $request,\n    ): void {\n        \u002F\u002F Run the application's malware\u002Fcontent policy or throw.\n    }\n}\n\nFile::make('document')->validateUploadsUsing(ScanDocumentUpload::class);\n",[100,1487,1488,1506,1523,1546,1567,1588,1592,1610,1615,1628,1643,1655,1667,1679,1692,1698,1703,1708,1712],{"__ignoreMap":110},[114,1489,1490,1492,1494,1496,1499,1501,1504],{"class":116,"line":117},[114,1491,948],{"class":947},[114,1493,952],{"class":951},[114,1495,955],{"class":472},[114,1497,1498],{"class":951},"Http",[114,1500,955],{"class":472},[114,1502,1503],{"class":968},"Request",[114,1505,972],{"class":472},[114,1507,1508,1510,1512,1514,1516,1518,1521],{"class":116,"line":476},[114,1509,948],{"class":947},[114,1511,952],{"class":951},[114,1513,955],{"class":472},[114,1515,1498],{"class":951},[114,1517,955],{"class":472},[114,1519,1520],{"class":968},"UploadedFile",[114,1522,972],{"class":472},[114,1524,1525,1527,1530,1532,1534,1536,1539,1541,1544],{"class":116,"line":495},[114,1526,948],{"class":947},[114,1528,1529],{"class":951}," Inertify",[114,1531,955],{"class":472},[114,1533,5],{"class":951},[114,1535,955],{"class":472},[114,1537,1538],{"class":951},"Contracts",[114,1540,955],{"class":472},[114,1542,1543],{"class":968},"ValidatesFileUploads",[114,1545,972],{"class":472},[114,1547,1548,1550,1552,1554,1556,1558,1560,1562,1565],{"class":116,"line":518},[114,1549,948],{"class":947},[114,1551,1529],{"class":951},[114,1553,955],{"class":472},[114,1555,5],{"class":951},[114,1557,955],{"class":472},[114,1559,51],{"class":951},[114,1561,955],{"class":472},[114,1563,1564],{"class":968},"TemporaryUpload",[114,1566,972],{"class":472},[114,1568,1569,1571,1573,1575,1577,1579,1581,1583,1586],{"class":116,"line":538},[114,1570,948],{"class":947},[114,1572,1529],{"class":951},[114,1574,955],{"class":472},[114,1576,5],{"class":951},[114,1578,955],{"class":472},[114,1580,51],{"class":951},[114,1582,955],{"class":472},[114,1584,1585],{"class":968},"UploadRules",[114,1587,972],{"class":472},[114,1589,1590],{"class":116,"line":582},[114,1591,586],{"emptyLinePlaceholder":585},[114,1593,1594,1598,1601,1604,1607],{"class":116,"line":589},[114,1595,1597],{"class":1596},"sNFzF","final",[114,1599,1600],{"class":1596}," class",[114,1602,1603],{"class":981}," ScanDocumentUpload",[114,1605,1606],{"class":1596}," implements",[114,1608,1609],{"class":981}," ValidatesFileUploads\n",[114,1611,1612],{"class":116,"line":603},[114,1613,1614],{"class":472},"{\n",[114,1616,1617,1620,1623,1626],{"class":116,"line":625},[114,1618,1619],{"class":1596},"    public",[114,1621,1622],{"class":1596}," function",[114,1624,1625],{"class":987}," validate",[114,1627,1010],{"class":472},[114,1629,1630,1633,1637,1641],{"class":116,"line":643},[114,1631,1632],{"class":981},"        TemporaryUpload",[114,1634,1636],{"class":1635},"sKlSU"," $",[114,1638,1640],{"class":1639},"sVbGb","upload",[114,1642,515],{"class":472},[114,1644,1645,1648,1650,1653],{"class":116,"line":666},[114,1646,1647],{"class":981},"        UploadedFile",[114,1649,1636],{"class":1635},[114,1651,1652],{"class":1639},"file",[114,1654,515],{"class":472},[114,1656,1657,1660,1662,1665],{"class":116,"line":680},[114,1658,1659],{"class":981},"        UploadRules",[114,1661,1636],{"class":1635},[114,1663,1664],{"class":1639},"rules",[114,1666,515],{"class":472},[114,1668,1669,1672,1674,1677],{"class":116,"line":706},[114,1670,1671],{"class":981},"        Request",[114,1673,1636],{"class":1635},[114,1675,1676],{"class":1639},"request",[114,1678,515],{"class":472},[114,1680,1681,1684,1686,1689],{"class":116,"line":730},[114,1682,1683],{"class":472},"    )",[114,1685,1019],{"class":489},[114,1687,1688],{"class":947}," void",[114,1690,1691],{"class":472}," {\n",[114,1693,1694],{"class":116,"line":736},[114,1695,1697],{"class":1696},"sdgcN","        \u002F\u002F Run the application's malware\u002Fcontent policy or throw.\n",[114,1699,1700],{"class":116,"line":742},[114,1701,1702],{"class":472},"    }\n",[114,1704,1705],{"class":116,"line":747},[114,1706,1707],{"class":472},"}\n",[114,1709,1710],{"class":116,"line":761},[114,1711,586],{"emptyLinePlaceholder":585},[114,1713,1714,1716,1718,1720,1722,1724,1726,1728,1730,1732,1735,1737,1740,1742,1745],{"class":116,"line":781},[114,1715,342],{"class":981},[114,1717,984],{"class":489},[114,1719,1108],{"class":987},[114,1721,1111],{"class":472},[114,1723,486],{"class":479},[114,1725,1468],{"class":124},[114,1727,486],{"class":479},[114,1729,1121],{"class":472},[114,1731,1124],{"class":489},[114,1733,1734],{"class":987},"validateUploadsUsing",[114,1736,1111],{"class":472},[114,1738,1739],{"class":981},"ScanDocumentUpload",[114,1741,984],{"class":489},[114,1743,1744],{"class":947},"class",[114,1746,1091],{"class":472},[92,1748,1750],{"id":1749},"artisan-commands","Artisan commands",[454,1752,1754],{"id":1753},"generate-a-form","Generate a form",[105,1756,1758],{"className":107,"code":1757,"language":109,"meta":110,"style":110},"php artisan make:form ProfileForm\n",[100,1759,1760],{"__ignoreMap":110},[114,1761,1762,1764,1766,1769],{"class":116,"line":117},[114,1763,121],{"class":120},[114,1765,125],{"class":124},[114,1767,1768],{"class":124}," make:form",[114,1770,1771],{"class":124}," ProfileForm\n",[88,1773,1774,1775,1778,1779,1782],{},"The generator creates ",[100,1776,1777],{},"App\\Forms\\ProfileForm"," by default with an empty ",[100,1780,1781],{},"fields()"," method.",[454,1784,1786],{"id":1785},"clean-expired-uploads","Clean expired uploads",[105,1788,1790],{"className":107,"code":1789,"language":109,"meta":110,"style":110},"php artisan form:cleanup-uploads\n",[100,1791,1792],{"__ignoreMap":110},[114,1793,1794,1796,1798],{"class":116,"line":117},[114,1795,121],{"class":120},[114,1797,125],{"class":124},[114,1799,1800],{"class":124}," form:cleanup-uploads\n",[88,1802,1803],{},"Override the normal temporary lifetime for one run:",[105,1805,1807],{"className":107,"code":1806,"language":109,"meta":110,"style":110},"php artisan form:cleanup-uploads --lifetime=7200\n",[100,1808,1809],{"__ignoreMap":110},[114,1810,1811,1813,1815,1818],{"class":116,"line":117},[114,1812,121],{"class":120},[114,1814,125],{"class":124},[114,1816,1817],{"class":124}," form:cleanup-uploads",[114,1819,1820],{"class":124}," --lifetime=7200\n",[88,1822,1823,1826],{},[100,1824,1825],{},"--lifetime"," is a non-negative number of seconds. Cleanup:",[1828,1829,1830,1834,1837,1840,1843],"ul",{},[1831,1832,1833],"li",{},"scans only package-owned upload directories on the configured temporary and direct disks;",[1831,1835,1836],{},"deletes expired temporary and chunked content;",[1831,1838,1839],{},"aborts expired pending S3 multipart sessions before deleting their metadata;",[1831,1841,1842],{},"retains completed direct uploads for the submission-token lifetime;",[1831,1844,1845],{},"continues after individual failures and returns a failing exit code when any operation remains retriable.",[88,1847,1848],{},"Schedule it in the host application:",[105,1850,1852],{"className":460,"code":1851,"language":121,"meta":110,"style":110},"use Illuminate\\Support\\Facades\\Schedule;\n\nSchedule::command('form:cleanup-uploads')->hourly();\n",[100,1853,1854,1875,1879],{"__ignoreMap":110},[114,1855,1856,1858,1860,1862,1864,1866,1868,1870,1873],{"class":116,"line":117},[114,1857,948],{"class":947},[114,1859,952],{"class":951},[114,1861,955],{"class":472},[114,1863,958],{"class":951},[114,1865,955],{"class":472},[114,1867,963],{"class":951},[114,1869,955],{"class":472},[114,1871,1872],{"class":968},"Schedule",[114,1874,972],{"class":472},[114,1876,1877],{"class":116,"line":476},[114,1878,586],{"emptyLinePlaceholder":585},[114,1880,1881,1883,1885,1888,1890,1892,1895,1897,1899,1901,1904],{"class":116,"line":495},[114,1882,1872],{"class":981},[114,1884,984],{"class":489},[114,1886,1887],{"class":987},"command",[114,1889,1111],{"class":472},[114,1891,486],{"class":479},[114,1893,1894],{"class":124},"form:cleanup-uploads",[114,1896,486],{"class":479},[114,1898,1121],{"class":472},[114,1900,1124],{"class":489},[114,1902,1903],{"class":987},"hourly",[114,1905,991],{"class":472},[88,1907,1908],{},"The cleanup command is operational maintenance, not an upload authorization control. Run it often enough for the selected storage cost and retention policy, and monitor non-zero exits.",[92,1910,1912],{"id":1911},"custom-transports","Custom transports",[88,1914,1915,1918,1919,138,1922,1925],{},[100,1916,1917],{},"File::upload(array|Closure $descriptor)"," replaces the nested headless upload descriptor. ",[100,1920,1921],{},"temporaryUploadUrl()",[100,1923,1924],{},"temporaryUploadDeleteUrl()"," override the normal temporary endpoints. When using application endpoints:",[1828,1927,1928,1931,1934,1937,1940],{},[1831,1929,1930],{},"return the token\u002Ffile payload expected by the Vue upload transport or provide a custom Vue transport;",[1831,1932,1933],{},"validate the actual uploaded content rather than trusting client MIME type or filename;",[1831,1935,1936],{},"issue expiring, tamper-resistant submission references;",[1831,1938,1939],{},"authorize deletion as well as creation;",[1831,1941,1942],{},"keep cleanup and abandoned-session handling explicit.",[88,1944,1945],{},"Custom endpoints are outside the package route and token guarantees unless the application deliberately implements equivalent controls.",[1947,1948,1949],"style",{},"html pre.shiki code .slOSs, html code.shiki .slOSs{--shiki-light:#E2931D;--shiki-light-font-style:inherit;--shiki-default:#89B4FA;--shiki-default-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic}html pre.shiki code .s2lAL, html code.shiki .s2lAL{--shiki-light:#91B859;--shiki-default:#A6E3A1;--shiki-dark:#A6E3A1}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 .su_vF, html code.shiki .su_vF{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#CBA6F7;--shiki-default-font-style:inherit;--shiki-dark:#CBA6F7;--shiki-dark-font-style:inherit}html pre.shiki code .sOG8g, html code.shiki .sOG8g{--shiki-light:#39ADB5;--shiki-default:#9399B2;--shiki-dark:#9399B2}html pre.shiki code .sQGZM, html code.shiki .sQGZM{--shiki-light:#39ADB5;--shiki-default:#A6E3A1;--shiki-dark:#A6E3A1}html pre.shiki code .sWTNM, html code.shiki .sWTNM{--shiki-light:#39ADB5;--shiki-default:#94E2D5;--shiki-dark:#94E2D5}html pre.shiki code .sCOdc, html code.shiki .sCOdc{--shiki-light:#F76D47;--shiki-default:#FAB387;--shiki-dark:#FAB387}html pre.shiki code .s27pR, html code.shiki .s27pR{--shiki-light:#39ADB5;--shiki-default:#CBA6F7;--shiki-dark:#CBA6F7}html pre.shiki code .scOca, html code.shiki .scOca{--shiki-light:#F76D47;--shiki-default:#CBA6F7;--shiki-dark:#CBA6F7}html pre.shiki code .svMjs, html code.shiki .svMjs{--shiki-light:#90A4AE;--shiki-default:#CDD6F4;--shiki-dark:#CDD6F4}html pre.shiki code .spKqO, html code.shiki .spKqO{--shiki-light:#90A4AE;--shiki-light-font-style:inherit;--shiki-default:#F9E2AF;--shiki-default-font-style:italic;--shiki-dark:#F9E2AF;--shiki-dark-font-style:italic}html pre.shiki code .s6-7G, html code.shiki .s6-7G{--shiki-light:#E2931D;--shiki-light-font-style:inherit;--shiki-default:#F9E2AF;--shiki-default-font-style:italic;--shiki-dark:#F9E2AF;--shiki-dark-font-style:italic}html pre.shiki code .sgeHj, html code.shiki .sgeHj{--shiki-light:#6182B8;--shiki-light-font-style:inherit;--shiki-default:#89B4FA;--shiki-default-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic}html pre.shiki code .sRLcR, html code.shiki .sRLcR{--shiki-light:#E2931D;--shiki-default:#CDD6F4;--shiki-dark:#CDD6F4}html pre.shiki code .sNFzF, html code.shiki .sNFzF{--shiki-light:#9C3EDA;--shiki-default:#CBA6F7;--shiki-dark:#CBA6F7}html pre.shiki code .sKlSU, html code.shiki .sKlSU{--shiki-light:#39ADB5;--shiki-default:#EBA0AC;--shiki-dark:#EBA0AC}html pre.shiki code .sVbGb, html code.shiki .sVbGb{--shiki-light:#90A4AE;--shiki-light-font-style:inherit;--shiki-default:#EBA0AC;--shiki-default-font-style:italic;--shiki-dark:#EBA0AC;--shiki-dark-font-style:italic}html pre.shiki code .sdgcN, html code.shiki .sdgcN{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#9399B2;--shiki-default-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic}",{"title":110,"searchDepth":476,"depth":476,"links":1951},[1952,1953,1956,1960,1964],{"id":94,"depth":476,"text":95},{"id":145,"depth":476,"text":146,"children":1954},[1955],{"id":456,"depth":495,"text":457},{"id":933,"depth":476,"text":934,"children":1957},[1958,1959],{"id":1140,"depth":495,"text":1141},{"id":1422,"depth":495,"text":1423},{"id":1749,"depth":476,"text":1750,"children":1961},[1962,1963],{"id":1753,"depth":495,"text":1754},{"id":1785,"depth":495,"text":1786},{"id":1911,"depth":476,"text":1912},"Upload configuration, opt-in routes, publish tags, Artisan commands, and operational security.","md",null,{},{"title":75,"description":1965},"fdqiJzC_35WoyR0vsFI6PdKJHII-3dCKmZtVjKC-aMY",[1972,1974],{"title":71,"path":72,"stem":73,"description":1973,"children":-1},"Public entry points, form engine, renderless components, renderer factory, composables, and controllers.",{"title":79,"path":80,"stem":81,"description":1975,"children":-1},"Stable Laravel-to-Vue resource contracts for forms, fields, conditions, wizards, choices, and uploads.",1786995560669]