[{"data":1,"prerenderedAt":1096},["ShallowReactive",2],{"content-\u002Fdocs\u002Fschemas\u002Frecords":3},{"id":4,"title":5,"body":6,"description":1071,"extension":1072,"meta":1073,"metaRows":1074,"navigation":149,"path":1075,"seo":1076,"source":1074,"stem":1094,"__hash__":1095},"docs\u002Fdocs\u002Fschemas\u002Frecords.md","Records & maps",{"type":7,"value":8,"toc":1062},"minimark",[9,13,33,36,47,52,59,183,186,240,243,363,385,407,411,426,486,493,529,553,559,565,675,689,720,723,727,733,837,842,936,943,947,950,977,984,988,1026,1030,1058],[10,11,5],"h1",{"id":12},"records-maps",[14,15,16],"blockquote",{},[17,18,19,20,24,25,28,29,32],"p",{},"Dictionaries when the keys aren't known at schema-write time: ",[21,22,23],"code",{},"z.record"," for the common case, ",[21,26,27],{},"z.map"," when you need the ",[21,30,31],{},"Map\u003CK, V>"," primitive and structured-clone fidelity.",[34,35],"docs-meta-table",{},[17,37,38,39,42,43,46],{},"The demo binds a record of per-user preferences. The keys are user IDs you don't know at compile time, so the schema declares ",[21,40,41],{},"z.record(z.string(), z.boolean())",", a string-keyed dictionary of booleans. Each key binds dynamically via ",[21,44,45],{},"register(\\","prefs.${userId}`)`.",[48,49],"docs-demo",{"label":50,"slug":51},"Records Demo","records",[53,54,56],"h2",{"id":55},"zrecordkeyschema-valueschema",[21,57,58],{},"z.record(keySchema, valueSchema)",[60,61,66],"pre",{"className":62,"code":63,"language":64,"meta":65,"style":65},"language-ts shiki shiki-themes github-light github-dark","const schema = z.object({\n  prefs: z.record(z.string(), z.boolean()),\n  scores: z.record(z.string(), z.number()),\n})\n\nconst form = useForm({\n  schema,\n  defaultValues: { prefs: {}, scores: {} },\n})\n","ts","",[21,67,68,95,119,138,144,151,166,172,178],{"__ignoreMap":65},[69,70,73,77,81,84,88,92],"span",{"class":71,"line":72},"line",1,[69,74,76],{"class":75},"szBVR","const",[69,78,80],{"class":79},"sj4cs"," schema",[69,82,83],{"class":75}," =",[69,85,87],{"class":86},"sVt8B"," z.",[69,89,91],{"class":90},"sScJk","object",[69,93,94],{"class":86},"({\n",[69,96,98,101,104,107,110,113,116],{"class":71,"line":97},2,[69,99,100],{"class":86},"  prefs: z.",[69,102,103],{"class":90},"record",[69,105,106],{"class":86},"(z.",[69,108,109],{"class":90},"string",[69,111,112],{"class":86},"(), z.",[69,114,115],{"class":90},"boolean",[69,117,118],{"class":86},"()),\n",[69,120,122,125,127,129,131,133,136],{"class":71,"line":121},3,[69,123,124],{"class":86},"  scores: z.",[69,126,103],{"class":90},[69,128,106],{"class":86},[69,130,109],{"class":90},[69,132,112],{"class":86},[69,134,135],{"class":90},"number",[69,137,118],{"class":86},[69,139,141],{"class":71,"line":140},4,[69,142,143],{"class":86},"})\n",[69,145,147],{"class":71,"line":146},5,[69,148,150],{"emptyLinePlaceholder":149},true,"\n",[69,152,154,156,159,161,164],{"class":71,"line":153},6,[69,155,76],{"class":75},[69,157,158],{"class":79}," form",[69,160,83],{"class":75},[69,162,163],{"class":90}," useForm",[69,165,94],{"class":86},[69,167,169],{"class":71,"line":168},7,[69,170,171],{"class":86},"  schema,\n",[69,173,175],{"class":71,"line":174},8,[69,176,177],{"class":86},"  defaultValues: { prefs: {}, scores: {} },\n",[69,179,181],{"class":71,"line":180},9,[69,182,143],{"class":86},[17,184,185],{},"Each value gets a dynamic-key path segment:",[60,187,189],{"className":62,"code":188,"language":64,"meta":65,"style":65},"form.values.prefs['user-42'] \u002F\u002F boolean | undefined\nform.register('prefs.user-42') \u002F\u002F path autocomplete; the key segment is dynamic\nform.errors.prefs['user-99'] \u002F\u002F ValidationError[] (empty when no errors)\n",[21,190,191,207,227],{"__ignoreMap":65},[69,192,193,196,200,203],{"class":71,"line":72},[69,194,195],{"class":86},"form.values.prefs[",[69,197,199],{"class":198},"sZZnC","'user-42'",[69,201,202],{"class":86},"] ",[69,204,206],{"class":205},"sJ8bj","\u002F\u002F boolean | undefined\n",[69,208,209,212,215,218,221,224],{"class":71,"line":97},[69,210,211],{"class":86},"form.",[69,213,214],{"class":90},"register",[69,216,217],{"class":86},"(",[69,219,220],{"class":198},"'prefs.user-42'",[69,222,223],{"class":86},") ",[69,225,226],{"class":205},"\u002F\u002F path autocomplete; the key segment is dynamic\n",[69,228,229,232,235,237],{"class":71,"line":121},[69,230,231],{"class":86},"form.errors.prefs[",[69,233,234],{"class":198},"'user-99'",[69,236,202],{"class":86},[69,238,239],{"class":205},"\u002F\u002F ValidationError[] (empty when no errors)\n",[17,241,242],{},"The key schema constrains what's valid; the value schema validates each entry:",[60,244,246],{"className":62,"code":245,"language":64,"meta":65,"style":65},"\u002F\u002F String keys are the common case\nz.record(z.string(), z.boolean())\n\n\u002F\u002F Constrained keys\nz.record(z.enum(['admin', 'editor', 'viewer']), z.boolean())\n\n\u002F\u002F Number-valued\nz.record(z.string(), z.number().min(0).max(100))\n",[21,247,248,253,271,275,280,315,319,324],{"__ignoreMap":65},[69,249,250],{"class":71,"line":72},[69,251,252],{"class":205},"\u002F\u002F String keys are the common case\n",[69,254,255,258,260,262,264,266,268],{"class":71,"line":97},[69,256,257],{"class":86},"z.",[69,259,103],{"class":90},[69,261,106],{"class":86},[69,263,109],{"class":90},[69,265,112],{"class":86},[69,267,115],{"class":90},[69,269,270],{"class":86},"())\n",[69,272,273],{"class":71,"line":121},[69,274,150],{"emptyLinePlaceholder":149},[69,276,277],{"class":71,"line":140},[69,278,279],{"class":205},"\u002F\u002F Constrained keys\n",[69,281,282,284,286,288,291,294,297,300,303,305,308,311,313],{"class":71,"line":146},[69,283,257],{"class":86},[69,285,103],{"class":90},[69,287,106],{"class":86},[69,289,290],{"class":90},"enum",[69,292,293],{"class":86},"([",[69,295,296],{"class":198},"'admin'",[69,298,299],{"class":86},", ",[69,301,302],{"class":198},"'editor'",[69,304,299],{"class":86},[69,306,307],{"class":198},"'viewer'",[69,309,310],{"class":86},"]), z.",[69,312,115],{"class":90},[69,314,270],{"class":86},[69,316,317],{"class":71,"line":153},[69,318,150],{"emptyLinePlaceholder":149},[69,320,321],{"class":71,"line":168},[69,322,323],{"class":205},"\u002F\u002F Number-valued\n",[69,325,326,328,330,332,334,336,338,341,344,346,349,352,355,357,360],{"class":71,"line":174},[69,327,257],{"class":86},[69,329,103],{"class":90},[69,331,106],{"class":86},[69,333,109],{"class":90},[69,335,112],{"class":86},[69,337,135],{"class":90},[69,339,340],{"class":86},"().",[69,342,343],{"class":90},"min",[69,345,217],{"class":86},[69,347,348],{"class":79},"0",[69,350,351],{"class":86},").",[69,353,354],{"class":90},"max",[69,356,217],{"class":86},[69,358,359],{"class":79},"100",[69,361,362],{"class":86},"))\n",[17,364,365,368,369,372,373,376,377,380,381,384],{},[21,366,367],{},"form.values.prefs[key]"," reads ",[21,370,371],{},"boolean | undefined","; the ",[21,374,375],{},"| undefined"," comes from ",[21,378,379],{},"noUncheckedIndexedAccess",", the same way array index reads do. Reach for ",[21,382,383],{},"??"," defaults at the call site:",[60,386,388],{"className":62,"code":387,"language":64,"meta":65,"style":65},"const checked = form.values.prefs[userId] ?? false\n",[21,389,390],{"__ignoreMap":65},[69,391,392,394,397,399,402,404],{"class":71,"line":72},[69,393,76],{"class":75},[69,395,396],{"class":79}," checked",[69,398,83],{"class":75},[69,400,401],{"class":86}," form.values.prefs[userId] ",[69,403,383],{"class":75},[69,405,406],{"class":79}," false\n",[53,408,410],{"id":409},"mutating-records","Mutating records",[17,412,413,414,417,418,421,422,425],{},"Records don't expose field-array helpers (",[21,415,416],{},"append"," \u002F ",[21,419,420],{},"remove"," \u002F etc.); they're keyed dictionaries, not ordered sequences. Mutate them via ",[21,423,424],{},"setValue"," directly:",[60,427,429],{"className":62,"code":428,"language":64,"meta":65,"style":65},"form.setValue(`prefs.${userId}`, true) \u002F\u002F set \u002F overwrite one entry\nform.setValue('prefs', { ...form.values.prefs, [userId]: true }) \u002F\u002F whole-record merge\n",[21,430,431,458],{"__ignoreMap":65},[69,432,433,435,437,439,442,445,448,450,453,455],{"class":71,"line":72},[69,434,211],{"class":86},[69,436,424],{"class":90},[69,438,217],{"class":86},[69,440,441],{"class":198},"`prefs.${",[69,443,444],{"class":86},"userId",[69,446,447],{"class":198},"}`",[69,449,299],{"class":86},[69,451,452],{"class":79},"true",[69,454,223],{"class":86},[69,456,457],{"class":205},"\u002F\u002F set \u002F overwrite one entry\n",[69,459,460,462,464,466,469,472,475,478,480,483],{"class":71,"line":97},[69,461,211],{"class":86},[69,463,424],{"class":90},[69,465,217],{"class":86},[69,467,468],{"class":198},"'prefs'",[69,470,471],{"class":86},", { ",[69,473,474],{"class":75},"...",[69,476,477],{"class":86},"form.values.prefs, [userId]: ",[69,479,452],{"class":79},[69,481,482],{"class":86}," }) ",[69,484,485],{"class":205},"\u002F\u002F whole-record merge\n",[17,487,488,489,492],{},"To flag a record entry blank, reach for ",[21,490,491],{},"unset",":",[60,494,496],{"className":62,"code":495,"language":64,"meta":65,"style":65},"import { unset } from 'attaform\u002Fzod'\nform.setValue(`prefs.${userId}`, unset)\n",[21,497,498,512],{"__ignoreMap":65},[69,499,500,503,506,509],{"class":71,"line":72},[69,501,502],{"class":75},"import",[69,504,505],{"class":86}," { unset } ",[69,507,508],{"class":75},"from",[69,510,511],{"class":198}," 'attaform\u002Fzod'\n",[69,513,514,516,518,520,522,524,526],{"class":71,"line":97},[69,515,211],{"class":86},[69,517,424],{"class":90},[69,519,217],{"class":86},[69,521,441],{"class":198},[69,523,444],{"class":86},[69,525,447],{"class":198},[69,527,528],{"class":86},", unset)\n",[17,530,531,533,534,537,538,541,542,545,546,548,549,552],{},[21,532,491],{}," at a record entry writes the value schema's slim default at the path and adds the path to ",[21,535,536],{},"form.blankPaths",". The bound input renders empty, and a required value schema surfaces ",[21,539,540],{},"atta:no-value-supplied"," reactively. To clear the whole record back to ",[21,543,544],{},"{}",", pass ",[21,547,491],{}," at the record container: ",[21,550,551],{},"form.setValue('prefs', unset)",".",[53,554,556],{"id":555},"zmapkeyschema-valueschema",[21,557,558],{},"z.map(keySchema, valueSchema)",[17,560,561,562,564],{},"Map is the primitive ",[21,563,31],{},", distinct from records (which are plain JS objects):",[60,566,568],{"className":62,"code":567,"language":64,"meta":65,"style":65},"const schema = z.object({\n  scoresByUser: z.map(z.string(), z.number()),\n})\n\nconst form = useForm({\n  schema,\n  defaultValues: { scoresByUser: new Map() },\n})\n\nform.values.scoresByUser \u002F\u002F Map\u003Cstring, number>\nform.values.scoresByUser.get('user-42') \u002F\u002F number | undefined\n",[21,569,570,584,602,606,610,622,626,640,644,648,657],{"__ignoreMap":65},[69,571,572,574,576,578,580,582],{"class":71,"line":72},[69,573,76],{"class":75},[69,575,80],{"class":79},[69,577,83],{"class":75},[69,579,87],{"class":86},[69,581,91],{"class":90},[69,583,94],{"class":86},[69,585,586,589,592,594,596,598,600],{"class":71,"line":97},[69,587,588],{"class":86},"  scoresByUser: z.",[69,590,591],{"class":90},"map",[69,593,106],{"class":86},[69,595,109],{"class":90},[69,597,112],{"class":86},[69,599,135],{"class":90},[69,601,118],{"class":86},[69,603,604],{"class":71,"line":121},[69,605,143],{"class":86},[69,607,608],{"class":71,"line":140},[69,609,150],{"emptyLinePlaceholder":149},[69,611,612,614,616,618,620],{"class":71,"line":146},[69,613,76],{"class":75},[69,615,158],{"class":79},[69,617,83],{"class":75},[69,619,163],{"class":90},[69,621,94],{"class":86},[69,623,624],{"class":71,"line":153},[69,625,171],{"class":86},[69,627,628,631,634,637],{"class":71,"line":168},[69,629,630],{"class":86},"  defaultValues: { scoresByUser: ",[69,632,633],{"class":75},"new",[69,635,636],{"class":90}," Map",[69,638,639],{"class":86},"() },\n",[69,641,642],{"class":71,"line":174},[69,643,143],{"class":86},[69,645,646],{"class":71,"line":180},[69,647,150],{"emptyLinePlaceholder":149},[69,649,651,654],{"class":71,"line":650},10,[69,652,653],{"class":86},"form.values.scoresByUser ",[69,655,656],{"class":205},"\u002F\u002F Map\u003Cstring, number>\n",[69,658,660,663,666,668,670,672],{"class":71,"line":659},11,[69,661,662],{"class":86},"form.values.scoresByUser.",[69,664,665],{"class":90},"get",[69,667,217],{"class":86},[69,669,199],{"class":198},[69,671,223],{"class":86},[69,673,674],{"class":205},"\u002F\u002F number | undefined\n",[17,676,677,678,681,682,685,686,688],{},"The runtime treats ",[21,679,680],{},"Map"," as a leaf container; ",[21,683,684],{},"form.values.scoresByUser"," returns the live ",[21,687,680],{},", and you call its methods directly. Use map (over record) when:",[690,691,692,703],"ul",{},[693,694,695,696,698,699,702],"li",{},"You need ",[21,697,680],{},"-specific semantics: insertion order, key types beyond strings, or ",[21,700,701],{},".size"," as an O(1) read.",[693,704,705,706,709,710,713,714,716,717,719],{},"The form persists to ",[21,707,708],{},"'indexeddb'"," and you want structured-clone fidelity. ",[21,711,712],{},"JSON.stringify"," flattens a ",[21,715,680],{}," to ",[21,718,544],{},"; structured clone preserves it.",[17,721,722],{},"Records are the right call for serialization-friendly dictionaries; maps are right when you need the primitive.",[53,724,726],{"id":725},"iterating-in-templates","Iterating in templates",[17,728,729,730,492],{},"For records, iterate over ",[21,731,732],{},"Object.entries",[60,734,738],{"className":735,"code":736,"language":737,"meta":65,"style":65},"language-vue shiki shiki-themes github-light github-dark","\u003Ctemplate>\n  \u003Clabel v-for=\"[userId, enabled] in Object.entries(form.values.prefs)\" :key=\"userId\">\n    \u003Cinput v-register=\"form.register(`prefs.${userId}`)\" type=\"checkbox\" :checked=\"enabled\" \u002F>\n    {{ userId }}\n  \u003C\u002Flabel>\n\u003C\u002Ftemplate>\n","vue",[21,739,740,752,779,814,819,828],{"__ignoreMap":65},[69,741,742,745,749],{"class":71,"line":72},[69,743,744],{"class":86},"\u003C",[69,746,748],{"class":747},"s9eBZ","template",[69,750,751],{"class":86},">\n",[69,753,754,757,760,763,766,769,772,774,777],{"class":71,"line":97},[69,755,756],{"class":86},"  \u003C",[69,758,759],{"class":747},"label",[69,761,762],{"class":90}," v-for",[69,764,765],{"class":86},"=",[69,767,768],{"class":198},"\"[userId, enabled] in Object.entries(form.values.prefs)\"",[69,770,771],{"class":90}," :key",[69,773,765],{"class":86},[69,775,776],{"class":198},"\"userId\"",[69,778,751],{"class":86},[69,780,781,784,787,790,792,795,798,800,803,806,808,811],{"class":71,"line":121},[69,782,783],{"class":86},"    \u003C",[69,785,786],{"class":747},"input",[69,788,789],{"class":90}," v-register",[69,791,765],{"class":86},[69,793,794],{"class":198},"\"form.register(`prefs.${userId}`)\"",[69,796,797],{"class":90}," type",[69,799,765],{"class":86},[69,801,802],{"class":198},"\"checkbox\"",[69,804,805],{"class":90}," :checked",[69,807,765],{"class":86},[69,809,810],{"class":198},"\"enabled\"",[69,812,813],{"class":86}," \u002F>\n",[69,815,816],{"class":71,"line":140},[69,817,818],{"class":86},"    {{ userId }}\n",[69,820,821,824,826],{"class":71,"line":146},[69,822,823],{"class":86},"  \u003C\u002F",[69,825,759],{"class":747},[69,827,751],{"class":86},[69,829,830,833,835],{"class":71,"line":153},[69,831,832],{"class":86},"\u003C\u002F",[69,834,748],{"class":747},[69,836,751],{"class":86},[17,838,839,840,425],{},"For maps, iterate the ",[21,841,680],{},[60,843,845],{"className":735,"code":844,"language":737,"meta":65,"style":65},"\u003Ctemplate>\n  \u003Cdiv v-for=\"[userId, score] in form.values.scoresByUser\" :key=\"userId\" class=\"row\">\n    \u003Cspan>{{ userId }}\u003C\u002Fspan>\n    \u003Cinput v-register=\"form.register(`scoresByUser.${userId}`)\" type=\"number\" \u002F>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n",[21,846,847,855,885,898,920,928],{"__ignoreMap":65},[69,848,849,851,853],{"class":71,"line":72},[69,850,744],{"class":86},[69,852,748],{"class":747},[69,854,751],{"class":86},[69,856,857,859,862,864,866,869,871,873,875,878,880,883],{"class":71,"line":97},[69,858,756],{"class":86},[69,860,861],{"class":747},"div",[69,863,762],{"class":90},[69,865,765],{"class":86},[69,867,868],{"class":198},"\"[userId, score] in form.values.scoresByUser\"",[69,870,771],{"class":90},[69,872,765],{"class":86},[69,874,776],{"class":198},[69,876,877],{"class":90}," class",[69,879,765],{"class":86},[69,881,882],{"class":198},"\"row\"",[69,884,751],{"class":86},[69,886,887,889,891,894,896],{"class":71,"line":121},[69,888,783],{"class":86},[69,890,69],{"class":747},[69,892,893],{"class":86},">{{ userId }}\u003C\u002F",[69,895,69],{"class":747},[69,897,751],{"class":86},[69,899,900,902,904,906,908,911,913,915,918],{"class":71,"line":140},[69,901,783],{"class":86},[69,903,786],{"class":747},[69,905,789],{"class":90},[69,907,765],{"class":86},[69,909,910],{"class":198},"\"form.register(`scoresByUser.${userId}`)\"",[69,912,797],{"class":90},[69,914,765],{"class":86},[69,916,917],{"class":198},"\"number\"",[69,919,813],{"class":86},[69,921,922,924,926],{"class":71,"line":146},[69,923,823],{"class":86},[69,925,861],{"class":747},[69,927,751],{"class":86},[69,929,930,932,934],{"class":71,"line":153},[69,931,832],{"class":86},[69,933,748],{"class":747},[69,935,751],{"class":86},[17,937,938,939,942],{},"The template renders re-run when the underlying record \u002F map updates because ",[21,940,941],{},"form.values"," proxies through the reactivity layer.",[53,944,946],{"id":945},"errors-per-entry","Errors per entry",[17,948,949],{},"Errors land at the keyed path, the same as array elements:",[60,951,953],{"className":62,"code":952,"language":64,"meta":65,"style":65},"form.errors.prefs['user-42'] \u002F\u002F ValidationError[] (empty when no errors)\nform.errors.scoresByUser['user-99'] \u002F\u002F (works for maps too)\n",[21,954,955,965],{"__ignoreMap":65},[69,956,957,959,961,963],{"class":71,"line":72},[69,958,231],{"class":86},[69,960,199],{"class":198},[69,962,202],{"class":86},[69,964,239],{"class":205},[69,966,967,970,972,974],{"class":71,"line":97},[69,968,969],{"class":86},"form.errors.scoresByUser[",[69,971,234],{"class":198},[69,973,202],{"class":86},[69,975,976],{"class":205},"\u002F\u002F (works for maps too)\n",[17,978,979,980,983],{},"The aggregate ",[21,981,982],{},"form.meta.errors"," flattens every entry's errors into one list, in path order.",[53,985,987],{"id":986},"when-to-pick-which","When to pick which",[690,989,990,999,1007,1018],{},[693,991,992,998],{},[993,994,995],"strong",{},[21,996,997],{},"z.record(z.string(), V)",": string-keyed dictionaries serialized as JSON. The default choice.",[693,1000,1001,1006],{},[993,1002,1003],{},[21,1004,1005],{},"z.record(z.enum([...]), V)",": keys constrained to a small set. Compile-time autocomplete on the keys.",[693,1008,1009,1014,1015,1017],{},[993,1010,1011],{},[21,1012,1013],{},"z.map(K, V)",": when you need ",[21,1016,680],{},"'s insertion order, non-string keys, or structured-clone fidelity for IndexedDB persistence.",[693,1019,1020,1025],{},[993,1021,1022],{},[21,1023,1024],{},"z.object({ … })",": when the keys are fixed and known at schema-write time. Records are for the dynamic case.",[53,1027,1029],{"id":1028},"where-to-next","Where to next",[690,1031,1032,1040,1047],{},[693,1033,1034,1039],{},[1035,1036,1038],"a",{"href":1037},"\u002Fdocs\u002Fschemas\u002Farrays-and-tuples","Arrays & tuples",": numeric-keyed sequences; the other half of the \"many-items\" picture.",[693,1041,1042,1046],{},[1035,1043,1045],{"href":1044},"\u002Fdocs\u002Fschemas\u002Fnested-objects","Nested objects",": fixed-shape composition; the alternative when keys are known.",[693,1048,1049,1055,1056,552],{},[1035,1050,1052,1054],{"href":1051},"\u002Fdocs\u002Fwriting-and-mutating\u002Funset",[21,1053,491],{},", the blank-anywhere sentinel",": how to flag a single record entry blank, or wipe the whole record back to ",[21,1057,544],{},[1059,1060,1061],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}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 .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":65,"searchDepth":97,"depth":97,"links":1063},[1064,1065,1066,1067,1068,1069,1070],{"id":55,"depth":97,"text":58},{"id":409,"depth":97,"text":410},{"id":555,"depth":97,"text":558},{"id":725,"depth":97,"text":726},{"id":945,"depth":97,"text":946},{"id":986,"depth":97,"text":987},{"id":1028,"depth":97,"text":1029},"[object Object]","md",{},null,"\u002Fdocs\u002Fschemas\u002Frecords",{"title":5,"description":1077},{"z":1078,"metaRows":1082},{"record() is a string-keyed dictionary with uniform value types; z":1079},{"map() is the Map\u003CK, V> primitive":1080},{" Both bind through dynamic-key paths":1081},"register(`prefs.${userId}`), errors.scores[name].",[1083,1086,1089,1091],{"label":1084,"value":1085},"Category","Schema feature",{"label":1087,"value":1088,"kind":21},"String-keyed dict","z.record(K, V)",{"label":1090,"value":1013,"kind":21},"Map primitive",{"label":1092,"value":1093,"kind":21},"Path access","register(`prefs.${dynamicKey}`)","docs\u002Fschemas\u002Frecords","j6uGs0xTNyNzRF1QBQaRw6rKE2ctABXt0tiTK9xTCsQ",1780949757918]