[{"data":1,"prerenderedAt":1346},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fv2\u002Fextending\u002Fpalettes":3},{"id":4,"title":5,"body":6,"description":16,"extension":1340,"meta":1341,"navigation":90,"path":1342,"seo":1343,"stem":1344,"__hash__":1345},"docs\u002Fdocs\u002Fv2\u002Fextending\u002Fpalettes.md","Palettes",{"type":7,"value":8,"toc":1325},"minimark",[9,13,17,20,25,285,288,349,356,360,366,379,384,477,480,484,612,625,629,683,689,693,696,788,791,962,966,983,987,992,1118,1122,1125,1147,1151,1306,1310,1321],[10,11,5],"h1",{"id":12},"palettes",[14,15,16],"p",{},"The palette is the TUI's interaction model — filterable, tabbed, keyboard-driven, fast.\nEvery built-in mode is one. You can build your own, and you get the same machinery: the\nfiltering, the cursor, the tab strip, the scrolling, all of it.",[14,18,19],{},"That is what makes this the most useful thing in the extension API. A palette plus a key\nchord is a complete workflow, and it looks and behaves exactly like the interface it sits\ninside.",[21,22,24],"h2",{"id":23},"creating-one","Creating one",[26,27,32],"pre",{"className":28,"code":29,"language":30,"meta":31,"style":31},"language-ts shiki shiki-themes dark-plus","palette.create(\"branches\", {\n    key: \"&\",\n    description: \"switch branch\",\n\n    async list(query, tab) {\n        const branches = await readBranches()\n        return branches.map(branch => ({\n            id: branch.sha,\n            label: branch.name,\n            description: branch.subject,\n            action: () => {\n                tui.info(`checked out ${branch.name}`)\n            },\n        }))\n    },\n})\n","ts","",[33,34,35,62,74,85,92,116,139,163,179,194,209,227,261,267,273,279],"code",{"__ignoreMap":31},[36,37,40,44,48,52,55,59],"span",{"class":38,"line":39},"line",1,[36,41,43],{"class":42},"s3F5K","palette",[36,45,47],{"class":46},"sTNBD",".",[36,49,51],{"class":50},"sCudf","create",[36,53,54],{"class":46},"(",[36,56,58],{"class":57},"sKc5r","\"branches\"",[36,60,61],{"class":46},", {\n",[36,63,65,68,71],{"class":38,"line":64},2,[36,66,67],{"class":42},"    key:",[36,69,70],{"class":57}," \"&\"",[36,72,73],{"class":46},",\n",[36,75,77,80,83],{"class":38,"line":76},3,[36,78,79],{"class":42},"    description:",[36,81,82],{"class":57}," \"switch branch\"",[36,84,73],{"class":46},[36,86,88],{"class":38,"line":87},4,[36,89,91],{"emptyLinePlaceholder":90},true,"\n",[36,93,95,99,102,104,107,110,113],{"class":38,"line":94},5,[36,96,98],{"class":97},"scz_3","    async",[36,100,101],{"class":50}," list",[36,103,54],{"class":46},[36,105,106],{"class":42},"query",[36,108,109],{"class":46},", ",[36,111,112],{"class":42},"tab",[36,114,115],{"class":46},") {\n",[36,117,119,122,126,129,133,136],{"class":38,"line":118},6,[36,120,121],{"class":97},"        const",[36,123,125],{"class":124},"s9McN"," branches",[36,127,128],{"class":46}," = ",[36,130,132],{"class":131},"sYbnZ","await",[36,134,135],{"class":50}," readBranches",[36,137,138],{"class":46},"()\n",[36,140,142,145,147,149,152,154,157,160],{"class":38,"line":141},7,[36,143,144],{"class":131},"        return",[36,146,125],{"class":42},[36,148,47],{"class":46},[36,150,151],{"class":50},"map",[36,153,54],{"class":46},[36,155,156],{"class":42},"branch",[36,158,159],{"class":97}," =>",[36,161,162],{"class":46}," ({\n",[36,164,166,169,172,174,177],{"class":38,"line":165},8,[36,167,168],{"class":42},"            id:",[36,170,171],{"class":42}," branch",[36,173,47],{"class":46},[36,175,176],{"class":42},"sha",[36,178,73],{"class":46},[36,180,182,185,187,189,192],{"class":38,"line":181},9,[36,183,184],{"class":42},"            label:",[36,186,171],{"class":42},[36,188,47],{"class":46},[36,190,191],{"class":42},"name",[36,193,73],{"class":46},[36,195,197,200,202,204,207],{"class":38,"line":196},10,[36,198,199],{"class":42},"            description:",[36,201,171],{"class":42},[36,203,47],{"class":46},[36,205,206],{"class":42},"subject",[36,208,73],{"class":46},[36,210,212,215,218,221,224],{"class":38,"line":211},11,[36,213,214],{"class":50},"            action",[36,216,217],{"class":42},":",[36,219,220],{"class":46}," () ",[36,222,223],{"class":97},"=>",[36,225,226],{"class":46}," {\n",[36,228,230,233,235,238,240,243,246,248,250,252,255,258],{"class":38,"line":229},12,[36,231,232],{"class":42},"                tui",[36,234,47],{"class":46},[36,236,237],{"class":50},"info",[36,239,54],{"class":46},[36,241,242],{"class":57},"`checked out ",[36,244,245],{"class":97},"${",[36,247,156],{"class":42},[36,249,47],{"class":46},[36,251,191],{"class":42},[36,253,254],{"class":97},"}",[36,256,257],{"class":57},"`",[36,259,260],{"class":46},")\n",[36,262,264],{"class":38,"line":263},13,[36,265,266],{"class":46},"            },\n",[36,268,270],{"class":38,"line":269},14,[36,271,272],{"class":46},"        }))\n",[36,274,276],{"class":38,"line":275},15,[36,277,278],{"class":46},"    },\n",[36,280,282],{"class":38,"line":281},16,[36,283,284],{"class":46},"})\n",[14,286,287],{},"Three ways to open it, all equivalent:",[26,289,291],{"className":28,"code":290,"language":30,"meta":31,"style":31},"await palette.open(\"branches\")   \u002F\u002F from code\nkeys.register(\"ctrl+b\", () => palette.open(\"branches\"))\n",[33,292,293,316],{"__ignoreMap":31},[36,294,295,297,300,302,305,307,309,312],{"class":38,"line":39},[36,296,132],{"class":131},[36,298,299],{"class":42}," palette",[36,301,47],{"class":46},[36,303,304],{"class":50},"open",[36,306,54],{"class":46},[36,308,58],{"class":57},[36,310,311],{"class":46},")   ",[36,313,315],{"class":314},"sOLPB","\u002F\u002F from code\n",[36,317,318,321,323,326,328,331,334,336,338,340,342,344,346],{"class":38,"line":64},[36,319,320],{"class":42},"keys",[36,322,47],{"class":46},[36,324,325],{"class":50},"register",[36,327,54],{"class":46},[36,329,330],{"class":57},"\"ctrl+b\"",[36,332,333],{"class":46},", () ",[36,335,223],{"class":97},[36,337,299],{"class":42},[36,339,47],{"class":46},[36,341,304],{"class":50},[36,343,54],{"class":46},[36,345,58],{"class":57},[36,347,348],{"class":46},"))\n",[14,350,351,352,355],{},"...or press ",[33,353,354],{},"&",", the mode key it claimed. It behaves exactly like a built-in mode key:\nonly from an empty input, and pressing it again toggles back.",[21,357,359],{"id":358},"the-list","The list",[14,361,362,365],{},[33,363,364],{},"list()"," is called with the current query and active tab, and may be async. While the\nfirst call is in flight the palette shows its own loading row, then swaps in your rows\nwhen it settles. Results are cached per query and tab.",[14,367,368,369,372,373,375,376,378],{},"You do not have to filter — Axon applies its own substring match over labels and\ndescriptions. Return everything and let the palette narrow it. Set ",[33,370,371],{},"filter: false"," if\nyour ",[33,374,364],{}," already narrows by ",[33,377,106],{}," itself.",[380,381,383],"h3",{"id":382},"rows","Rows",[385,386,387,400],"table",{},[388,389,390],"thead",{},[391,392,393,397],"tr",{},[394,395,396],"th",{},"Field",[394,398,399],{},"What it does",[401,402,403,414,424,434,447,457,467],"tbody",{},[391,404,405,411],{},[406,407,408],"td",{},[33,409,410],{},"id",[406,412,413],{},"Stable identity for the row",[391,415,416,421],{},[406,417,418],{},[33,419,420],{},"label",[406,422,423],{},"What is shown",[391,425,426,431],{},[406,427,428],{},[33,429,430],{},"description",[406,432,433],{},"Dim text beside the label",[391,435,436,441],{},[406,437,438],{},[33,439,440],{},"action",[406,442,443,444],{},"Run on ",[33,445,446],{},"Enter",[391,448,449,454],{},[406,450,451],{},[33,452,453],{},"preview",[406,455,456],{},"Run as the cursor moves over it",[391,458,459,464],{},[406,460,461],{},[33,462,463],{},"header",[406,465,466],{},"A non-selectable section title",[391,468,469,474],{},[406,470,471],{},[33,472,473],{},"separator",[406,475,476],{},"A blank spacer between groups",[14,478,479],{},"Headers and separators are structure, not results: a header only survives filtering when\nsomething under it matched, and a header that matches the query pulls its whole group in.",[380,481,483],{"id":482},"tabs","Tabs",[26,485,487],{"className":28,"code":486,"language":30,"meta":31,"style":31},"palette.create(\"work\", {\n    tabs: [\n        { id: \"open\", label: \"Open\" },\n        { id: \"done\", label: \"Done\" },\n    ],\n\n    async list(query, tab) {\n        return tab === \"done\" ? closedItems() : openItems()\n    },\n})\n",[33,488,489,504,512,534,552,557,561,577,604,608],{"__ignoreMap":31},[36,490,491,493,495,497,499,502],{"class":38,"line":39},[36,492,43],{"class":42},[36,494,47],{"class":46},[36,496,51],{"class":50},[36,498,54],{"class":46},[36,500,501],{"class":57},"\"work\"",[36,503,61],{"class":46},[36,505,506,509],{"class":38,"line":64},[36,507,508],{"class":42},"    tabs:",[36,510,511],{"class":46}," [\n",[36,513,514,517,520,523,525,528,531],{"class":38,"line":76},[36,515,516],{"class":46},"        { ",[36,518,519],{"class":42},"id:",[36,521,522],{"class":57}," \"open\"",[36,524,109],{"class":46},[36,526,527],{"class":42},"label:",[36,529,530],{"class":57}," \"Open\"",[36,532,533],{"class":46}," },\n",[36,535,536,538,540,543,545,547,550],{"class":38,"line":87},[36,537,516],{"class":46},[36,539,519],{"class":42},[36,541,542],{"class":57}," \"done\"",[36,544,109],{"class":46},[36,546,527],{"class":42},[36,548,549],{"class":57}," \"Done\"",[36,551,533],{"class":46},[36,553,554],{"class":38,"line":94},[36,555,556],{"class":46},"    ],\n",[36,558,559],{"class":38,"line":118},[36,560,91],{"emptyLinePlaceholder":90},[36,562,563,565,567,569,571,573,575],{"class":38,"line":141},[36,564,98],{"class":97},[36,566,101],{"class":50},[36,568,54],{"class":46},[36,570,106],{"class":42},[36,572,109],{"class":46},[36,574,112],{"class":42},[36,576,115],{"class":46},[36,578,579,581,584,587,590,593,596,599,602],{"class":38,"line":165},[36,580,144],{"class":131},[36,582,583],{"class":42}," tab",[36,585,586],{"class":46}," === ",[36,588,589],{"class":57},"\"done\"",[36,591,592],{"class":46}," ? ",[36,594,595],{"class":50},"closedItems",[36,597,598],{"class":46},"() : ",[36,600,601],{"class":50},"openItems",[36,603,138],{"class":46},[36,605,606],{"class":38,"line":181},[36,607,278],{"class":46},[36,609,610],{"class":38,"line":196},[36,611,284],{"class":46},[14,613,614,617,618,621,622,624],{},[33,615,616],{},"←"," and ",[33,619,620],{},"→"," switch tabs. Your ",[33,623,364],{}," is called again with the new tab.",[380,626,628],{"id":627},"refreshing","Refreshing",[26,630,632],{"className":28,"code":631,"language":30,"meta":31,"style":31},"const branches = palette.create(\"branches\", { \u002F* ... *\u002F })\n\n\u002F\u002F later — the underlying data changed\nbranches.refresh()\n",[33,633,634,662,666,671],{"__ignoreMap":31},[36,635,636,639,641,643,645,647,649,651,653,656,659],{"class":38,"line":39},[36,637,638],{"class":97},"const",[36,640,125],{"class":124},[36,642,128],{"class":46},[36,644,43],{"class":42},[36,646,47],{"class":46},[36,648,51],{"class":50},[36,650,54],{"class":46},[36,652,58],{"class":57},[36,654,655],{"class":46},", { ",[36,657,658],{"class":314},"\u002F* ... *\u002F",[36,660,661],{"class":46}," })\n",[36,663,664],{"class":38,"line":64},[36,665,91],{"emptyLinePlaceholder":90},[36,667,668],{"class":38,"line":76},[36,669,670],{"class":314},"\u002F\u002F later — the underlying data changed\n",[36,672,673,676,678,681],{"class":38,"line":87},[36,674,675],{"class":42},"branches",[36,677,47],{"class":46},[36,679,680],{"class":50},"refresh",[36,682,138],{"class":46},[14,684,685,688],{},[33,686,687],{},"refresh()"," drops the cache so the next open recomputes. It does not reopen anything.",[21,690,692],{"id":691},"asking-a-question","Asking a question",[14,694,695],{},"Three verbs for when your code needs an answer:",[26,697,699],{"className":28,"code":698,"language":30,"meta":31,"style":31},"const branch = await palette.pick([\"main\", \"dev\", \"staging\"])\nconst sure   = await palette.confirm(\"Deploy to production?\")\nconst name   = await palette.prompt(\"Agent name?\")\n",[33,700,701,737,763],{"__ignoreMap":31},[36,702,703,705,707,709,711,713,715,718,721,724,726,729,731,734],{"class":38,"line":39},[36,704,638],{"class":97},[36,706,171],{"class":124},[36,708,128],{"class":46},[36,710,132],{"class":131},[36,712,299],{"class":42},[36,714,47],{"class":46},[36,716,717],{"class":50},"pick",[36,719,720],{"class":46},"([",[36,722,723],{"class":57},"\"main\"",[36,725,109],{"class":46},[36,727,728],{"class":57},"\"dev\"",[36,730,109],{"class":46},[36,732,733],{"class":57},"\"staging\"",[36,735,736],{"class":46},"])\n",[36,738,739,741,744,747,749,751,753,756,758,761],{"class":38,"line":64},[36,740,638],{"class":97},[36,742,743],{"class":124}," sure",[36,745,746],{"class":46},"   = ",[36,748,132],{"class":131},[36,750,299],{"class":42},[36,752,47],{"class":46},[36,754,755],{"class":50},"confirm",[36,757,54],{"class":46},[36,759,760],{"class":57},"\"Deploy to production?\"",[36,762,260],{"class":46},[36,764,765,767,770,772,774,776,778,781,783,786],{"class":38,"line":76},[36,766,638],{"class":97},[36,768,769],{"class":124}," name",[36,771,746],{"class":46},[36,773,132],{"class":131},[36,775,299],{"class":42},[36,777,47],{"class":46},[36,779,780],{"class":50},"prompt",[36,782,54],{"class":46},[36,784,785],{"class":57},"\"Agent name?\"",[36,787,260],{"class":46},[14,789,790],{},"They return promises, and that is the entire design. A multi-step flow is sequential\nawaits — there is no wizard framework, because there does not need to be one:",[26,792,794],{"className":28,"code":793,"language":30,"meta":31,"style":31},"commands.register(\"deploy\", async () => {\n    const env = await palette.pick([\"staging\", \"production\"])\n    if (!env) return\n\n    const sure = await palette.confirm(`Deploy to ${env}?`)\n    if (!sure) return\n\n    await runDeploy(env)\n    tui.info(`deployed to ${env}`)\n})\n",[33,795,796,821,850,867,871,903,916,920,934,958],{"__ignoreMap":31},[36,797,798,801,803,805,807,810,812,815,817,819],{"class":38,"line":39},[36,799,800],{"class":42},"commands",[36,802,47],{"class":46},[36,804,325],{"class":50},[36,806,54],{"class":46},[36,808,809],{"class":57},"\"deploy\"",[36,811,109],{"class":46},[36,813,814],{"class":97},"async",[36,816,220],{"class":46},[36,818,223],{"class":97},[36,820,226],{"class":46},[36,822,823,826,829,831,833,835,837,839,841,843,845,848],{"class":38,"line":64},[36,824,825],{"class":97},"    const",[36,827,828],{"class":124}," env",[36,830,128],{"class":46},[36,832,132],{"class":131},[36,834,299],{"class":42},[36,836,47],{"class":46},[36,838,717],{"class":50},[36,840,720],{"class":46},[36,842,733],{"class":57},[36,844,109],{"class":46},[36,846,847],{"class":57},"\"production\"",[36,849,736],{"class":46},[36,851,852,855,858,861,864],{"class":38,"line":76},[36,853,854],{"class":131},"    if",[36,856,857],{"class":46}," (!",[36,859,860],{"class":42},"env",[36,862,863],{"class":46},") ",[36,865,866],{"class":131},"return\n",[36,868,869],{"class":38,"line":87},[36,870,91],{"emptyLinePlaceholder":90},[36,872,873,875,877,879,881,883,885,887,889,892,894,896,898,901],{"class":38,"line":94},[36,874,825],{"class":97},[36,876,743],{"class":124},[36,878,128],{"class":46},[36,880,132],{"class":131},[36,882,299],{"class":42},[36,884,47],{"class":46},[36,886,755],{"class":50},[36,888,54],{"class":46},[36,890,891],{"class":57},"`Deploy to ",[36,893,245],{"class":97},[36,895,860],{"class":42},[36,897,254],{"class":97},[36,899,900],{"class":57},"?`",[36,902,260],{"class":46},[36,904,905,907,909,912,914],{"class":38,"line":118},[36,906,854],{"class":131},[36,908,857],{"class":46},[36,910,911],{"class":42},"sure",[36,913,863],{"class":46},[36,915,866],{"class":131},[36,917,918],{"class":38,"line":141},[36,919,91],{"emptyLinePlaceholder":90},[36,921,922,925,928,930,932],{"class":38,"line":165},[36,923,924],{"class":131},"    await",[36,926,927],{"class":50}," runDeploy",[36,929,54],{"class":46},[36,931,860],{"class":42},[36,933,260],{"class":46},[36,935,936,939,941,943,945,948,950,952,954,956],{"class":38,"line":181},[36,937,938],{"class":42},"    tui",[36,940,47],{"class":46},[36,942,237],{"class":50},[36,944,54],{"class":46},[36,946,947],{"class":57},"`deployed to ",[36,949,245],{"class":97},[36,951,860],{"class":42},[36,953,254],{"class":97},[36,955,257],{"class":57},[36,957,260],{"class":46},[36,959,960],{"class":38,"line":196},[36,961,284],{"class":46},[380,963,965],{"id":964},"escape-is-an-answer","Escape is an answer",[14,967,968,969,972,973,617,975,73,977,972,980,982],{},"Every question resolves when the user walks away — ",[33,970,971],{},"undefined"," for ",[33,974,717],{},[33,976,780],{},[33,978,979],{},"false",[33,981,755],{},". It is in the return type, so you cannot forget to handle it. A\ncancelled question is an ordinary outcome, not an error.",[380,984,986],{"id":985},"picking-objects","Picking objects",[14,988,989,991],{},[33,990,717],{}," over strings returns the string. Pick over objects and you get the object back,\nnot the label:",[26,993,995],{"className":28,"code":994,"language":30,"meta":31,"style":31},"const branch = await palette.pick([\n    { label: \"main\", description: \"the trunk\", value: { sha: \"aaa1111\" } },\n    { label: \"dev\",  description: \"in progress\", value: { sha: \"bbb2222\" } },\n])\n\nif (branch) tui.info(branch.sha)\n",[33,996,997,1016,1051,1081,1085,1089],{"__ignoreMap":31},[36,998,999,1001,1003,1005,1007,1009,1011,1013],{"class":38,"line":39},[36,1000,638],{"class":97},[36,1002,171],{"class":124},[36,1004,128],{"class":46},[36,1006,132],{"class":131},[36,1008,299],{"class":42},[36,1010,47],{"class":46},[36,1012,717],{"class":50},[36,1014,1015],{"class":46},"([\n",[36,1017,1018,1021,1023,1026,1028,1031,1034,1036,1039,1042,1045,1048],{"class":38,"line":64},[36,1019,1020],{"class":46},"    { ",[36,1022,527],{"class":42},[36,1024,1025],{"class":57}," \"main\"",[36,1027,109],{"class":46},[36,1029,1030],{"class":42},"description:",[36,1032,1033],{"class":57}," \"the trunk\"",[36,1035,109],{"class":46},[36,1037,1038],{"class":42},"value:",[36,1040,1041],{"class":46}," { ",[36,1043,1044],{"class":42},"sha:",[36,1046,1047],{"class":57}," \"aaa1111\"",[36,1049,1050],{"class":46}," } },\n",[36,1052,1053,1055,1057,1060,1063,1065,1068,1070,1072,1074,1076,1079],{"class":38,"line":76},[36,1054,1020],{"class":46},[36,1056,527],{"class":42},[36,1058,1059],{"class":57}," \"dev\"",[36,1061,1062],{"class":46},",  ",[36,1064,1030],{"class":42},[36,1066,1067],{"class":57}," \"in progress\"",[36,1069,109],{"class":46},[36,1071,1038],{"class":42},[36,1073,1041],{"class":46},[36,1075,1044],{"class":42},[36,1077,1078],{"class":57}," \"bbb2222\"",[36,1080,1050],{"class":46},[36,1082,1083],{"class":38,"line":87},[36,1084,736],{"class":46},[36,1086,1087],{"class":38,"line":94},[36,1088,91],{"emptyLinePlaceholder":90},[36,1090,1091,1094,1097,1099,1101,1104,1106,1108,1110,1112,1114,1116],{"class":38,"line":118},[36,1092,1093],{"class":131},"if",[36,1095,1096],{"class":46}," (",[36,1098,156],{"class":42},[36,1100,863],{"class":46},[36,1102,1103],{"class":42},"tui",[36,1105,47],{"class":46},[36,1107,237],{"class":50},[36,1109,54],{"class":46},[36,1111,156],{"class":42},[36,1113,47],{"class":46},[36,1115,176],{"class":42},[36,1117,260],{"class":46},[380,1119,1121],{"id":1120},"one-at-a-time","One at a time",[14,1123,1124],{},"Opening a question or a palette while one is already open throws. Stealing the palette\nout from under someone mid-navigation drops whatever they were answering, and queueing\nwould let a config stack modal prompts in front of them. Check first if a keybind might\ncollide:",[26,1126,1128],{"className":28,"code":1127,"language":30,"meta":31,"style":31},"if (palette.isOpen) return\n",[33,1129,1130],{"__ignoreMap":31},[36,1131,1132,1134,1136,1138,1140,1143,1145],{"class":38,"line":39},[36,1133,1093],{"class":131},[36,1135,1096],{"class":46},[36,1137,43],{"class":42},[36,1139,47],{"class":46},[36,1141,1142],{"class":42},"isOpen",[36,1144,863],{"class":46},[36,1146,866],{"class":131},[21,1148,1150],{"id":1149},"reference","Reference",[26,1152,1154],{"className":28,"code":1153,"language":30,"meta":31,"style":31},"palette.create(name, definition)   \u002F\u002F → handle { open, refresh, dispose }\npalette.get(name)                  \u002F\u002F → handle | null\npalette.open(name)                 \u002F\u002F → Promise\u003Cvoid>\npalette.close()\npalette.isOpen                     \u002F\u002F → boolean\n\npalette.pick(options, opts?)       \u002F\u002F → Promise\u003CT | undefined>\npalette.confirm(message)           \u002F\u002F → Promise\u003Cboolean>\npalette.prompt(message, opts?)     \u002F\u002F → Promise\u003Cstring | undefined>\n",[33,1155,1156,1178,1197,1215,1226,1237,1241,1265,1284],{"__ignoreMap":31},[36,1157,1158,1160,1162,1164,1166,1168,1170,1173,1175],{"class":38,"line":39},[36,1159,43],{"class":42},[36,1161,47],{"class":46},[36,1163,51],{"class":50},[36,1165,54],{"class":46},[36,1167,191],{"class":42},[36,1169,109],{"class":46},[36,1171,1172],{"class":42},"definition",[36,1174,311],{"class":46},[36,1176,1177],{"class":314},"\u002F\u002F → handle { open, refresh, dispose }\n",[36,1179,1180,1182,1184,1187,1189,1191,1194],{"class":38,"line":64},[36,1181,43],{"class":42},[36,1183,47],{"class":46},[36,1185,1186],{"class":50},"get",[36,1188,54],{"class":46},[36,1190,191],{"class":42},[36,1192,1193],{"class":46},")                  ",[36,1195,1196],{"class":314},"\u002F\u002F → handle | null\n",[36,1198,1199,1201,1203,1205,1207,1209,1212],{"class":38,"line":76},[36,1200,43],{"class":42},[36,1202,47],{"class":46},[36,1204,304],{"class":50},[36,1206,54],{"class":46},[36,1208,191],{"class":42},[36,1210,1211],{"class":46},")                 ",[36,1213,1214],{"class":314},"\u002F\u002F → Promise\u003Cvoid>\n",[36,1216,1217,1219,1221,1224],{"class":38,"line":87},[36,1218,43],{"class":42},[36,1220,47],{"class":46},[36,1222,1223],{"class":50},"close",[36,1225,138],{"class":46},[36,1227,1228,1230,1232,1234],{"class":38,"line":94},[36,1229,43],{"class":42},[36,1231,47],{"class":46},[36,1233,1142],{"class":42},[36,1235,1236],{"class":314},"                     \u002F\u002F → boolean\n",[36,1238,1239],{"class":38,"line":118},[36,1240,91],{"emptyLinePlaceholder":90},[36,1242,1243,1245,1247,1249,1251,1254,1256,1259,1262],{"class":38,"line":141},[36,1244,43],{"class":42},[36,1246,47],{"class":46},[36,1248,717],{"class":50},[36,1250,54],{"class":46},[36,1252,1253],{"class":42},"options",[36,1255,109],{"class":46},[36,1257,1258],{"class":42},"opts",[36,1260,1261],{"class":46},"?)       ",[36,1263,1264],{"class":314},"\u002F\u002F → Promise\u003CT | undefined>\n",[36,1266,1267,1269,1271,1273,1275,1278,1281],{"class":38,"line":165},[36,1268,43],{"class":42},[36,1270,47],{"class":46},[36,1272,755],{"class":50},[36,1274,54],{"class":46},[36,1276,1277],{"class":42},"message",[36,1279,1280],{"class":46},")           ",[36,1282,1283],{"class":314},"\u002F\u002F → Promise\u003Cboolean>\n",[36,1285,1286,1288,1290,1292,1294,1296,1298,1300,1303],{"class":38,"line":181},[36,1287,43],{"class":42},[36,1289,47],{"class":46},[36,1291,780],{"class":50},[36,1293,54],{"class":46},[36,1295,1277],{"class":42},[36,1297,109],{"class":46},[36,1299,1258],{"class":42},[36,1301,1302],{"class":46},"?)     ",[36,1304,1305],{"class":314},"\u002F\u002F → Promise\u003Cstring | undefined>\n",[21,1307,1309],{"id":1308},"whats-next","What's next",[14,1311,1312,1320],{},[1313,1314,1315],"strong",{},[1316,1317,1319],"a",{"href":1318},"\u002Fdocs\u002Fv2\u002Fextending\u002Fplugins","Plugins & Hooks"," — running code when something happens,\nrather than when someone asks.",[1322,1323,1324],"style",{},"html pre.shiki code .s3F5K, html code.shiki .s3F5K{--shiki-default:#9CDCFE}html pre.shiki code .sTNBD, html code.shiki .sTNBD{--shiki-default:#D4D4D4}html pre.shiki code .sCudf, html code.shiki .sCudf{--shiki-default:#DCDCAA}html pre.shiki code .sKc5r, html code.shiki .sKc5r{--shiki-default:#CE9178}html pre.shiki code .scz_3, html code.shiki .scz_3{--shiki-default:#569CD6}html pre.shiki code .s9McN, html code.shiki .s9McN{--shiki-default:#4FC1FF}html pre.shiki code .sYbnZ, html code.shiki .sYbnZ{--shiki-default:#C586C0}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 pre.shiki code .sOLPB, html code.shiki .sOLPB{--shiki-default:#6A9955}",{"title":31,"searchDepth":64,"depth":64,"links":1326},[1327,1328,1333,1338,1339],{"id":23,"depth":64,"text":24},{"id":358,"depth":64,"text":359,"children":1329},[1330,1331,1332],{"id":382,"depth":76,"text":383},{"id":482,"depth":76,"text":483},{"id":627,"depth":76,"text":628},{"id":691,"depth":64,"text":692,"children":1334},[1335,1336,1337],{"id":964,"depth":76,"text":965},{"id":985,"depth":76,"text":986},{"id":1120,"depth":76,"text":1121},{"id":1149,"depth":64,"text":1150},{"id":1308,"depth":64,"text":1309},"md",{},"\u002Fdocs\u002Fv2\u002Fextending\u002Fpalettes",{"title":5,"description":16},"docs\u002Fv2\u002Fextending\u002Fpalettes","S4MAT5ibESvOvGHKVYoCcxTZODuJDs2eZXmR1eI96wQ",1786520846933]