[{"data":1,"prerenderedAt":1518},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fv2\u002Ftui\u002Fapi\u002Fpalette":3},{"id":4,"title":5,"body":6,"description":1511,"extension":1512,"meta":1513,"navigation":186,"path":1514,"seo":1515,"stem":1516,"__hash__":1517},"docs\u002Fdocs\u002Fv2\u002Ftui\u002Fapi\u002Fpalette.md","palette",{"type":7,"value":8,"toc":1505},"minimark",[9,12,26,926,931,1062,1072,1076,1122,1125,1129,1331,1338,1343,1425,1429,1473,1492,1501],[10,11,5],"h1",{"id":5},[13,14,15,16,20,21,25],"p",{},"The TUI's interaction primitive: your own lists, and asking the user a question. A palette\nyou register is the ",[17,18,19],"strong",{},"same widget"," as ",[22,23,24],"code",{},":"," — identical row shapes, filtering and\nnavigation — so every extension's UI is as good as the built-in one.",[27,28,33],"pre",{"className":29,"code":30,"language":31,"meta":32,"style":32},"language-ts shiki shiki-themes dark-plus","interface PaletteApi {\n    \u002F\u002F Your own palettes.\n    create(name: string, definition: PaletteDefinition): PaletteHandle\n    get(name: string): PaletteHandle | null\n    open(name: string): Promise\u003Cvoid>   \u002F\u002F throws if one is ALREADY open\n    close(): void\n    readonly isOpen: boolean            \u002F\u002F real lists only — not loading\u002Fvoice\n\n    \u002F\u002F Asking the user. All three resolve to a cancelled value on escape.\n    pick(options: readonly string[], opts?: { placeholder?: string }): Promise\u003Cstring | undefined>\n    pick\u003CT>(options: readonly PickOption\u003CT>[], opts?: { placeholder?: string }): Promise\u003CT | undefined>\n    confirm(message: string): Promise\u003Cboolean>\n    prompt(message: string, opts?: { placeholder?: string; initial?: string }): Promise\u003Cstring | undefined>\n}\n\ntype PaletteDefinition = {\n    list: (query: string, tab: string | null) =>\n        PaletteItem[] | PaletteResult | Promise\u003CPaletteItem[] | PaletteResult>\n    key?: string                \u002F\u002F mode key that opens it from an empty input\n    filter?: boolean            \u002F\u002F true when you filter by query yourself\n    tabs?: PaletteTab[]\n    maxHeight?: number\n    anchor?: \"top\" | \"bottom\"   \u002F\u002F \"bottom\" = terminal-log feel\n}\n\ntype PaletteItem = {\n    id: string\n    label: string\n    description?: string\n    action?: (signal: AbortSignal) => void | Promise\u003Cvoid>\n    chunks?: readonly string[]      \u002F\u002F independently searchable parts\n    descendQuery?: string           \u002F\u002F rewrite the query instead of running\n    choices?: () => PaletteItem[]   \u002F\u002F a follow-up list\n    preview?: () => void            \u002F\u002F run on cursor movement\n    workingMessage?: string\n    detach?: boolean                \u002F\u002F close now, finish in the background\n    header?: boolean\n    separator?: boolean\n}\n\ntype PaletteResult = {\n    items: PaletteItem[]\n    breadcrumb?: string | null\n    status?: PaletteStatus\n    invalid?: boolean   \u002F\u002F the query cannot resolve to anything selectable\n}\n\ntype PaletteHandle = {\n    readonly name: string\n    open: () => Promise\u003Cvoid>\n    refresh: () => void   \u002F\u002F drop the cached list; does not reopen\n    dispose: Disposer\n}\n\ntype PickOption\u003CT> = { label: string; description?: string; value: T }\n","ts","",[22,34,35,52,59,96,121,152,164,181,188,194,247,300,325,375,381,386,398,434,461,474,487,501,512,532,537,542,552,563,573,583,618,636,649,668,683,693,706,717,727,732,737,747,759,773,784,797,802,807,817,829,848,863,874,879,884],{"__ignoreMap":32},[36,37,40,44,48],"span",{"class":38,"line":39},"line",1,[36,41,43],{"class":42},"scz_3","interface",[36,45,47],{"class":46},"sNl3T"," PaletteApi",[36,49,51],{"class":50},"sTNBD"," {\n",[36,53,55],{"class":38,"line":54},2,[36,56,58],{"class":57},"sOLPB","    \u002F\u002F Your own palettes.\n",[36,60,62,66,69,73,76,79,82,85,87,90,93],{"class":38,"line":61},3,[36,63,65],{"class":64},"sCudf","    create",[36,67,68],{"class":50},"(",[36,70,72],{"class":71},"s3F5K","name",[36,74,75],{"class":50},": ",[36,77,78],{"class":46},"string",[36,80,81],{"class":50},", ",[36,83,84],{"class":71},"definition",[36,86,75],{"class":50},[36,88,89],{"class":46},"PaletteDefinition",[36,91,92],{"class":50},"): ",[36,94,95],{"class":46},"PaletteHandle\n",[36,97,99,102,104,106,108,110,112,115,118],{"class":38,"line":98},4,[36,100,101],{"class":64},"    get",[36,103,68],{"class":50},[36,105,72],{"class":71},[36,107,75],{"class":50},[36,109,78],{"class":46},[36,111,92],{"class":50},[36,113,114],{"class":46},"PaletteHandle",[36,116,117],{"class":50}," | ",[36,119,120],{"class":46},"null\n",[36,122,124,127,129,131,133,135,137,140,143,146,149],{"class":38,"line":123},5,[36,125,126],{"class":64},"    open",[36,128,68],{"class":50},[36,130,72],{"class":71},[36,132,75],{"class":50},[36,134,78],{"class":46},[36,136,92],{"class":50},[36,138,139],{"class":46},"Promise",[36,141,142],{"class":50},"\u003C",[36,144,145],{"class":46},"void",[36,147,148],{"class":50},">   ",[36,150,151],{"class":57},"\u002F\u002F throws if one is ALREADY open\n",[36,153,155,158,161],{"class":38,"line":154},6,[36,156,157],{"class":64},"    close",[36,159,160],{"class":50},"(): ",[36,162,163],{"class":46},"void\n",[36,165,167,170,173,175,178],{"class":38,"line":166},7,[36,168,169],{"class":42},"    readonly",[36,171,172],{"class":71}," isOpen",[36,174,75],{"class":50},[36,176,177],{"class":46},"boolean",[36,179,180],{"class":57},"            \u002F\u002F real lists only — not loading\u002Fvoice\n",[36,182,184],{"class":38,"line":183},8,[36,185,187],{"emptyLinePlaceholder":186},true,"\n",[36,189,191],{"class":38,"line":190},9,[36,192,193],{"class":57},"    \u002F\u002F Asking the user. All three resolve to a cancelled value on escape.\n",[36,195,197,200,202,205,207,210,213,216,219,222,225,228,230,233,235,237,239,241,244],{"class":38,"line":196},10,[36,198,199],{"class":64},"    pick",[36,201,68],{"class":50},[36,203,204],{"class":71},"options",[36,206,75],{"class":50},[36,208,209],{"class":42},"readonly",[36,211,212],{"class":46}," string",[36,214,215],{"class":50},"[], ",[36,217,218],{"class":71},"opts",[36,220,221],{"class":50},"?: { ",[36,223,224],{"class":71},"placeholder",[36,226,227],{"class":50},"?: ",[36,229,78],{"class":46},[36,231,232],{"class":50}," }): ",[36,234,139],{"class":46},[36,236,142],{"class":50},[36,238,78],{"class":46},[36,240,117],{"class":50},[36,242,243],{"class":46},"undefined",[36,245,246],{"class":50},">\n",[36,248,250,252,254,257,260,262,264,266,269,271,273,276,278,280,282,284,286,288,290,292,294,296,298],{"class":38,"line":249},11,[36,251,199],{"class":64},[36,253,142],{"class":50},[36,255,256],{"class":46},"T",[36,258,259],{"class":50},">(",[36,261,204],{"class":71},[36,263,75],{"class":50},[36,265,209],{"class":42},[36,267,268],{"class":46}," PickOption",[36,270,142],{"class":50},[36,272,256],{"class":46},[36,274,275],{"class":50},">[], ",[36,277,218],{"class":71},[36,279,221],{"class":50},[36,281,224],{"class":71},[36,283,227],{"class":50},[36,285,78],{"class":46},[36,287,232],{"class":50},[36,289,139],{"class":46},[36,291,142],{"class":50},[36,293,256],{"class":46},[36,295,117],{"class":50},[36,297,243],{"class":46},[36,299,246],{"class":50},[36,301,303,306,308,311,313,315,317,319,321,323],{"class":38,"line":302},12,[36,304,305],{"class":64},"    confirm",[36,307,68],{"class":50},[36,309,310],{"class":71},"message",[36,312,75],{"class":50},[36,314,78],{"class":46},[36,316,92],{"class":50},[36,318,139],{"class":46},[36,320,142],{"class":50},[36,322,177],{"class":46},[36,324,246],{"class":50},[36,326,328,331,333,335,337,339,341,343,345,347,349,351,354,357,359,361,363,365,367,369,371,373],{"class":38,"line":327},13,[36,329,330],{"class":64},"    prompt",[36,332,68],{"class":50},[36,334,310],{"class":71},[36,336,75],{"class":50},[36,338,78],{"class":46},[36,340,81],{"class":50},[36,342,218],{"class":71},[36,344,221],{"class":50},[36,346,224],{"class":71},[36,348,227],{"class":50},[36,350,78],{"class":46},[36,352,353],{"class":50},"; ",[36,355,356],{"class":71},"initial",[36,358,227],{"class":50},[36,360,78],{"class":46},[36,362,232],{"class":50},[36,364,139],{"class":46},[36,366,142],{"class":50},[36,368,78],{"class":46},[36,370,117],{"class":50},[36,372,243],{"class":46},[36,374,246],{"class":50},[36,376,378],{"class":38,"line":377},14,[36,379,380],{"class":50},"}\n",[36,382,384],{"class":38,"line":383},15,[36,385,187],{"emptyLinePlaceholder":186},[36,387,389,392,395],{"class":38,"line":388},16,[36,390,391],{"class":42},"type",[36,393,394],{"class":46}," PaletteDefinition",[36,396,397],{"class":50}," = {\n",[36,399,401,404,407,410,412,414,416,419,421,423,425,428,431],{"class":38,"line":400},17,[36,402,403],{"class":64},"    list",[36,405,406],{"class":50},": (",[36,408,409],{"class":71},"query",[36,411,75],{"class":50},[36,413,78],{"class":46},[36,415,81],{"class":50},[36,417,418],{"class":71},"tab",[36,420,75],{"class":50},[36,422,78],{"class":46},[36,424,117],{"class":50},[36,426,427],{"class":46},"null",[36,429,430],{"class":50},") ",[36,432,433],{"class":42},"=>\n",[36,435,437,440,443,446,448,450,452,455,457,459],{"class":38,"line":436},18,[36,438,439],{"class":46},"        PaletteItem",[36,441,442],{"class":50},"[] | ",[36,444,445],{"class":46},"PaletteResult",[36,447,117],{"class":50},[36,449,139],{"class":46},[36,451,142],{"class":50},[36,453,454],{"class":46},"PaletteItem",[36,456,442],{"class":50},[36,458,445],{"class":46},[36,460,246],{"class":50},[36,462,464,467,469,471],{"class":38,"line":463},19,[36,465,466],{"class":71},"    key",[36,468,227],{"class":50},[36,470,78],{"class":46},[36,472,473],{"class":57},"                \u002F\u002F mode key that opens it from an empty input\n",[36,475,477,480,482,484],{"class":38,"line":476},20,[36,478,479],{"class":71},"    filter",[36,481,227],{"class":50},[36,483,177],{"class":46},[36,485,486],{"class":57},"            \u002F\u002F true when you filter by query yourself\n",[36,488,490,493,495,498],{"class":38,"line":489},21,[36,491,492],{"class":71},"    tabs",[36,494,227],{"class":50},[36,496,497],{"class":46},"PaletteTab",[36,499,500],{"class":50},"[]\n",[36,502,504,507,509],{"class":38,"line":503},22,[36,505,506],{"class":71},"    maxHeight",[36,508,227],{"class":50},[36,510,511],{"class":46},"number\n",[36,513,515,518,520,524,526,529],{"class":38,"line":514},23,[36,516,517],{"class":71},"    anchor",[36,519,227],{"class":50},[36,521,523],{"class":522},"sKc5r","\"top\"",[36,525,117],{"class":50},[36,527,528],{"class":522},"\"bottom\"",[36,530,531],{"class":57},"   \u002F\u002F \"bottom\" = terminal-log feel\n",[36,533,535],{"class":38,"line":534},24,[36,536,380],{"class":50},[36,538,540],{"class":38,"line":539},25,[36,541,187],{"emptyLinePlaceholder":186},[36,543,545,547,550],{"class":38,"line":544},26,[36,546,391],{"class":42},[36,548,549],{"class":46}," PaletteItem",[36,551,397],{"class":50},[36,553,555,558,560],{"class":38,"line":554},27,[36,556,557],{"class":71},"    id",[36,559,75],{"class":50},[36,561,562],{"class":46},"string\n",[36,564,566,569,571],{"class":38,"line":565},28,[36,567,568],{"class":71},"    label",[36,570,75],{"class":50},[36,572,562],{"class":46},[36,574,576,579,581],{"class":38,"line":575},29,[36,577,578],{"class":71},"    description",[36,580,227],{"class":50},[36,582,562],{"class":46},[36,584,586,589,592,595,597,600,602,605,608,610,612,614,616],{"class":38,"line":585},30,[36,587,588],{"class":64},"    action",[36,590,591],{"class":50},"?: (",[36,593,594],{"class":71},"signal",[36,596,75],{"class":50},[36,598,599],{"class":46},"AbortSignal",[36,601,430],{"class":50},[36,603,604],{"class":42},"=>",[36,606,607],{"class":46}," void",[36,609,117],{"class":50},[36,611,139],{"class":46},[36,613,142],{"class":50},[36,615,145],{"class":46},[36,617,246],{"class":50},[36,619,621,624,626,628,630,633],{"class":38,"line":620},31,[36,622,623],{"class":71},"    chunks",[36,625,227],{"class":50},[36,627,209],{"class":42},[36,629,212],{"class":46},[36,631,632],{"class":50},"[]      ",[36,634,635],{"class":57},"\u002F\u002F independently searchable parts\n",[36,637,639,642,644,646],{"class":38,"line":638},32,[36,640,641],{"class":71},"    descendQuery",[36,643,227],{"class":50},[36,645,78],{"class":46},[36,647,648],{"class":57},"           \u002F\u002F rewrite the query instead of running\n",[36,650,652,655,658,660,662,665],{"class":38,"line":651},33,[36,653,654],{"class":64},"    choices",[36,656,657],{"class":50},"?: () ",[36,659,604],{"class":42},[36,661,549],{"class":46},[36,663,664],{"class":50},"[]   ",[36,666,667],{"class":57},"\u002F\u002F a follow-up list\n",[36,669,671,674,676,678,680],{"class":38,"line":670},34,[36,672,673],{"class":64},"    preview",[36,675,657],{"class":50},[36,677,604],{"class":42},[36,679,607],{"class":46},[36,681,682],{"class":57},"            \u002F\u002F run on cursor movement\n",[36,684,686,689,691],{"class":38,"line":685},35,[36,687,688],{"class":71},"    workingMessage",[36,690,227],{"class":50},[36,692,562],{"class":46},[36,694,696,699,701,703],{"class":38,"line":695},36,[36,697,698],{"class":71},"    detach",[36,700,227],{"class":50},[36,702,177],{"class":46},[36,704,705],{"class":57},"                \u002F\u002F close now, finish in the background\n",[36,707,709,712,714],{"class":38,"line":708},37,[36,710,711],{"class":71},"    header",[36,713,227],{"class":50},[36,715,716],{"class":46},"boolean\n",[36,718,720,723,725],{"class":38,"line":719},38,[36,721,722],{"class":71},"    separator",[36,724,227],{"class":50},[36,726,716],{"class":46},[36,728,730],{"class":38,"line":729},39,[36,731,380],{"class":50},[36,733,735],{"class":38,"line":734},40,[36,736,187],{"emptyLinePlaceholder":186},[36,738,740,742,745],{"class":38,"line":739},41,[36,741,391],{"class":42},[36,743,744],{"class":46}," PaletteResult",[36,746,397],{"class":50},[36,748,750,753,755,757],{"class":38,"line":749},42,[36,751,752],{"class":71},"    items",[36,754,75],{"class":50},[36,756,454],{"class":46},[36,758,500],{"class":50},[36,760,762,765,767,769,771],{"class":38,"line":761},43,[36,763,764],{"class":71},"    breadcrumb",[36,766,227],{"class":50},[36,768,78],{"class":46},[36,770,117],{"class":50},[36,772,120],{"class":46},[36,774,776,779,781],{"class":38,"line":775},44,[36,777,778],{"class":71},"    status",[36,780,227],{"class":50},[36,782,783],{"class":46},"PaletteStatus\n",[36,785,787,790,792,794],{"class":38,"line":786},45,[36,788,789],{"class":71},"    invalid",[36,791,227],{"class":50},[36,793,177],{"class":46},[36,795,796],{"class":57},"   \u002F\u002F the query cannot resolve to anything selectable\n",[36,798,800],{"class":38,"line":799},46,[36,801,380],{"class":50},[36,803,805],{"class":38,"line":804},47,[36,806,187],{"emptyLinePlaceholder":186},[36,808,810,812,815],{"class":38,"line":809},48,[36,811,391],{"class":42},[36,813,814],{"class":46}," PaletteHandle",[36,816,397],{"class":50},[36,818,820,822,825,827],{"class":38,"line":819},49,[36,821,169],{"class":42},[36,823,824],{"class":71}," name",[36,826,75],{"class":50},[36,828,562],{"class":46},[36,830,832,834,837,839,842,844,846],{"class":38,"line":831},50,[36,833,126],{"class":64},[36,835,836],{"class":50},": () ",[36,838,604],{"class":42},[36,840,841],{"class":46}," Promise",[36,843,142],{"class":50},[36,845,145],{"class":46},[36,847,246],{"class":50},[36,849,851,854,856,858,860],{"class":38,"line":850},51,[36,852,853],{"class":64},"    refresh",[36,855,836],{"class":50},[36,857,604],{"class":42},[36,859,607],{"class":46},[36,861,862],{"class":57},"   \u002F\u002F drop the cached list; does not reopen\n",[36,864,866,869,871],{"class":38,"line":865},52,[36,867,868],{"class":71},"    dispose",[36,870,75],{"class":50},[36,872,873],{"class":46},"Disposer\n",[36,875,877],{"class":38,"line":876},53,[36,878,380],{"class":50},[36,880,882],{"class":38,"line":881},54,[36,883,187],{"emptyLinePlaceholder":186},[36,885,887,889,891,893,895,898,901,903,905,907,910,912,914,916,919,921,923],{"class":38,"line":886},55,[36,888,391],{"class":42},[36,890,268],{"class":46},[36,892,142],{"class":50},[36,894,256],{"class":46},[36,896,897],{"class":50},"> = { ",[36,899,900],{"class":71},"label",[36,902,75],{"class":50},[36,904,78],{"class":46},[36,906,353],{"class":50},[36,908,909],{"class":71},"description",[36,911,227],{"class":50},[36,913,78],{"class":46},[36,915,353],{"class":50},[36,917,918],{"class":71},"value",[36,920,75],{"class":50},[36,922,256],{"class":46},[36,924,925],{"class":50}," }\n",[927,928,930],"h2",{"id":929},"a-palette-of-your-own","A palette of your own",[27,932,934],{"className":29,"code":933,"language":31,"meta":32,"style":32},"palette.create(\"branches\", {\n    key: \"&\",\n    async list() {\n        return (await gitBranches()).map(name => ({\n            id: name,\n            label: name,\n            action: () => checkout(name),\n        }))\n    },\n})\n",[22,935,936,954,965,976,1007,1016,1025,1047,1052,1057],{"__ignoreMap":32},[36,937,938,940,943,946,948,951],{"class":38,"line":39},[36,939,5],{"class":71},[36,941,942],{"class":50},".",[36,944,945],{"class":64},"create",[36,947,68],{"class":50},[36,949,950],{"class":522},"\"branches\"",[36,952,953],{"class":50},", {\n",[36,955,956,959,962],{"class":38,"line":54},[36,957,958],{"class":71},"    key:",[36,960,961],{"class":522}," \"&\"",[36,963,964],{"class":50},",\n",[36,966,967,970,973],{"class":38,"line":61},[36,968,969],{"class":42},"    async",[36,971,972],{"class":64}," list",[36,974,975],{"class":50},"() {\n",[36,977,978,982,985,988,991,994,997,999,1001,1004],{"class":38,"line":98},[36,979,981],{"class":980},"sYbnZ","        return",[36,983,984],{"class":50}," (",[36,986,987],{"class":980},"await",[36,989,990],{"class":64}," gitBranches",[36,992,993],{"class":50},"()).",[36,995,996],{"class":64},"map",[36,998,68],{"class":50},[36,1000,72],{"class":71},[36,1002,1003],{"class":42}," =>",[36,1005,1006],{"class":50}," ({\n",[36,1008,1009,1012,1014],{"class":38,"line":123},[36,1010,1011],{"class":71},"            id:",[36,1013,824],{"class":71},[36,1015,964],{"class":50},[36,1017,1018,1021,1023],{"class":38,"line":154},[36,1019,1020],{"class":71},"            label:",[36,1022,824],{"class":71},[36,1024,964],{"class":50},[36,1026,1027,1030,1032,1035,1037,1040,1042,1044],{"class":38,"line":166},[36,1028,1029],{"class":64},"            action",[36,1031,24],{"class":71},[36,1033,1034],{"class":50}," () ",[36,1036,604],{"class":42},[36,1038,1039],{"class":64}," checkout",[36,1041,68],{"class":50},[36,1043,72],{"class":71},[36,1045,1046],{"class":50},"),\n",[36,1048,1049],{"class":38,"line":183},[36,1050,1051],{"class":50},"        }))\n",[36,1053,1054],{"class":38,"line":190},[36,1055,1056],{"class":50},"    },\n",[36,1058,1059],{"class":38,"line":196},[36,1060,1061],{"class":50},"})\n",[13,1063,1064,1065,1067,1068,1071],{},"The TUI filters for you, so a list that ignores ",[22,1066,409],{}," is still searchable. Set\n",[22,1069,1070],{},"filter: true"," when you filter yourself.",[927,1073,1075],{"id":1074},"searchable-rows","Searchable rows",[27,1077,1079],{"className":29,"code":1078,"language":31,"meta":32,"style":32},"{ id, label: \"claude-sonnet-5\", chunks: [\"openrouter\", \"anthropic\", \"claude-sonnet-5\"] }\n",[22,1080,1081],{"__ignoreMap":32},[36,1082,1083,1086,1089,1091,1094,1096,1099,1101,1104,1107,1110,1112,1115,1117,1119],{"class":38,"line":39},[36,1084,1085],{"class":50},"{ ",[36,1087,1088],{"class":71},"id",[36,1090,81],{"class":50},[36,1092,900],{"class":1093},"sqDPy",[36,1095,75],{"class":50},[36,1097,1098],{"class":522},"\"claude-sonnet-5\"",[36,1100,81],{"class":50},[36,1102,1103],{"class":1093},"chunks",[36,1105,1106],{"class":50},": [",[36,1108,1109],{"class":522},"\"openrouter\"",[36,1111,81],{"class":50},[36,1113,1114],{"class":522},"\"anthropic\"",[36,1116,81],{"class":50},[36,1118,1098],{"class":522},[36,1120,1121],{"class":50},"] }\n",[13,1123,1124],{},"Every query term narrows against any chunk — how ~400 models live in one flat list.",[927,1126,1128],{"id":1127},"asking-the-user","Asking the user",[27,1130,1132],{"className":29,"code":1131,"language":31,"meta":32,"style":32},"commands.register(\"deploy\", async () => {\n    const env = await palette.pick([\"staging\", \"production\"])\n    if (!env) return\n\n    if (!await palette.confirm(`Deploy to ${env}?`)) return\n\n    const tag = await palette.prompt(\"Tag\", { initial: \"latest\" })\n    if (!tag) return\n\n    await runDeploy(env, tag)\n})\n",[22,1133,1134,1160,1196,1212,1216,1252,1256,1291,1304,1308,1327],{"__ignoreMap":32},[36,1135,1136,1139,1141,1144,1146,1149,1151,1154,1156,1158],{"class":38,"line":39},[36,1137,1138],{"class":71},"commands",[36,1140,942],{"class":50},[36,1142,1143],{"class":64},"register",[36,1145,68],{"class":50},[36,1147,1148],{"class":522},"\"deploy\"",[36,1150,81],{"class":50},[36,1152,1153],{"class":42},"async",[36,1155,1034],{"class":50},[36,1157,604],{"class":42},[36,1159,51],{"class":50},[36,1161,1162,1165,1169,1172,1174,1177,1179,1182,1185,1188,1190,1193],{"class":38,"line":54},[36,1163,1164],{"class":42},"    const",[36,1166,1168],{"class":1167},"s9McN"," env",[36,1170,1171],{"class":50}," = ",[36,1173,987],{"class":980},[36,1175,1176],{"class":71}," palette",[36,1178,942],{"class":50},[36,1180,1181],{"class":64},"pick",[36,1183,1184],{"class":50},"([",[36,1186,1187],{"class":522},"\"staging\"",[36,1189,81],{"class":50},[36,1191,1192],{"class":522},"\"production\"",[36,1194,1195],{"class":50},"])\n",[36,1197,1198,1201,1204,1207,1209],{"class":38,"line":61},[36,1199,1200],{"class":980},"    if",[36,1202,1203],{"class":50}," (!",[36,1205,1206],{"class":71},"env",[36,1208,430],{"class":50},[36,1210,1211],{"class":980},"return\n",[36,1213,1214],{"class":38,"line":98},[36,1215,187],{"emptyLinePlaceholder":186},[36,1217,1218,1220,1222,1224,1226,1228,1231,1233,1236,1239,1241,1244,1247,1250],{"class":38,"line":123},[36,1219,1200],{"class":980},[36,1221,1203],{"class":50},[36,1223,987],{"class":980},[36,1225,1176],{"class":71},[36,1227,942],{"class":50},[36,1229,1230],{"class":64},"confirm",[36,1232,68],{"class":50},[36,1234,1235],{"class":522},"`Deploy to ",[36,1237,1238],{"class":42},"${",[36,1240,1206],{"class":71},[36,1242,1243],{"class":42},"}",[36,1245,1246],{"class":522},"?`",[36,1248,1249],{"class":50},")) ",[36,1251,1211],{"class":980},[36,1253,1254],{"class":38,"line":154},[36,1255,187],{"emptyLinePlaceholder":186},[36,1257,1258,1260,1263,1265,1267,1269,1271,1274,1276,1279,1282,1285,1288],{"class":38,"line":166},[36,1259,1164],{"class":42},[36,1261,1262],{"class":1167}," tag",[36,1264,1171],{"class":50},[36,1266,987],{"class":980},[36,1268,1176],{"class":71},[36,1270,942],{"class":50},[36,1272,1273],{"class":64},"prompt",[36,1275,68],{"class":50},[36,1277,1278],{"class":522},"\"Tag\"",[36,1280,1281],{"class":50},", { ",[36,1283,1284],{"class":71},"initial:",[36,1286,1287],{"class":522}," \"latest\"",[36,1289,1290],{"class":50}," })\n",[36,1292,1293,1295,1297,1300,1302],{"class":38,"line":183},[36,1294,1200],{"class":980},[36,1296,1203],{"class":50},[36,1298,1299],{"class":71},"tag",[36,1301,430],{"class":50},[36,1303,1211],{"class":980},[36,1305,1306],{"class":38,"line":190},[36,1307,187],{"emptyLinePlaceholder":186},[36,1309,1310,1313,1316,1318,1320,1322,1324],{"class":38,"line":196},[36,1311,1312],{"class":980},"    await",[36,1314,1315],{"class":64}," runDeploy",[36,1317,68],{"class":50},[36,1319,1206],{"class":71},[36,1321,81],{"class":50},[36,1323,1299],{"class":71},[36,1325,1326],{"class":50},")\n",[36,1328,1329],{"class":38,"line":249},[36,1330,1061],{"class":50},[13,1332,1333,1334,1337],{},"Sequential awaits. There is no wizard framework because there does not need to be one —\neach step resolves to a cancelled value on escape, so ",[22,1335,1336],{},"if (!x) return"," is the whole\ncontrol flow.",[13,1339,1340,1342],{},[22,1341,1181],{}," also takes objects when the choice is not a string:",[27,1344,1346],{"className":29,"code":1345,"language":31,"meta":32,"style":32},"const target = await palette.pick([\n    { label: \"main\", description: \"default\", value: mainRef },\n    { label: \"dev\", value: devRef },\n])   \u002F\u002F resolves to the ref, not the label\n",[22,1347,1348,1369,1399,1417],{"__ignoreMap":32},[36,1349,1350,1353,1356,1358,1360,1362,1364,1366],{"class":38,"line":39},[36,1351,1352],{"class":42},"const",[36,1354,1355],{"class":1167}," target",[36,1357,1171],{"class":50},[36,1359,987],{"class":980},[36,1361,1176],{"class":71},[36,1363,942],{"class":50},[36,1365,1181],{"class":64},[36,1367,1368],{"class":50},"([\n",[36,1370,1371,1374,1377,1380,1382,1385,1388,1390,1393,1396],{"class":38,"line":54},[36,1372,1373],{"class":50},"    { ",[36,1375,1376],{"class":71},"label:",[36,1378,1379],{"class":522}," \"main\"",[36,1381,81],{"class":50},[36,1383,1384],{"class":71},"description:",[36,1386,1387],{"class":522}," \"default\"",[36,1389,81],{"class":50},[36,1391,1392],{"class":71},"value:",[36,1394,1395],{"class":71}," mainRef",[36,1397,1398],{"class":50}," },\n",[36,1400,1401,1403,1405,1408,1410,1412,1415],{"class":38,"line":61},[36,1402,1373],{"class":50},[36,1404,1376],{"class":71},[36,1406,1407],{"class":522}," \"dev\"",[36,1409,81],{"class":50},[36,1411,1392],{"class":71},[36,1413,1414],{"class":71}," devRef",[36,1416,1398],{"class":50},[36,1418,1419,1422],{"class":38,"line":98},[36,1420,1421],{"class":50},"])   ",[36,1423,1424],{"class":57},"\u002F\u002F resolves to the ref, not the label\n",[927,1426,1428],{"id":1427},"isopen","isOpen",[27,1430,1432],{"className":29,"code":1431,"language":31,"meta":32,"style":32},"mode.set(\"command\")    \u002F\u002F isOpen === true\nmode.set(\"loading\")    \u002F\u002F isOpen === false — a spinner, not a list\n",[22,1433,1434,1455],{"__ignoreMap":32},[36,1435,1436,1439,1441,1444,1446,1449,1452],{"class":38,"line":39},[36,1437,1438],{"class":71},"mode",[36,1440,942],{"class":50},[36,1442,1443],{"class":64},"set",[36,1445,68],{"class":50},[36,1447,1448],{"class":522},"\"command\"",[36,1450,1451],{"class":50},")    ",[36,1453,1454],{"class":57},"\u002F\u002F isOpen === true\n",[36,1456,1457,1459,1461,1463,1465,1468,1470],{"class":38,"line":54},[36,1458,1438],{"class":71},[36,1460,942],{"class":50},[36,1462,1443],{"class":64},[36,1464,68],{"class":50},[36,1466,1467],{"class":522},"\"loading\"",[36,1469,1451],{"class":50},[36,1471,1472],{"class":57},"\u002F\u002F isOpen === false — a spinner, not a list\n",[13,1474,1475,1476,81,1479,1482,1483,1486,1487,1491],{},"A palette is a list of rows to pick from. ",[22,1477,1478],{},"loading",[22,1480,1481],{},"voice"," and ",[22,1484,1485],{},"escalation"," are input\n",[1488,1489,1490],"em",{},"states",", and nothing is being picked in any of them.",[13,1493,1494,1497,1498,1500],{},[22,1495,1496],{},"open()"," throws if another palette is already up — stealing it mid-navigation is the kind\nof silent degradation that makes an extension system feel haunted. Check ",[22,1499,1428],{}," first\nif a keybind might collide.",[1502,1503,1504],"style",{},"html pre.shiki code .scz_3, html code.shiki .scz_3{--shiki-default:#569CD6}html pre.shiki code .sNl3T, html code.shiki .sNl3T{--shiki-default:#4EC9B0}html pre.shiki code .sTNBD, html code.shiki .sTNBD{--shiki-default:#D4D4D4}html pre.shiki code .sOLPB, html code.shiki .sOLPB{--shiki-default:#6A9955}html pre.shiki code .sCudf, html code.shiki .sCudf{--shiki-default:#DCDCAA}html pre.shiki code .s3F5K, html code.shiki .s3F5K{--shiki-default:#9CDCFE}html pre.shiki code .sKc5r, html code.shiki .sKc5r{--shiki-default:#CE9178}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 .sYbnZ, html code.shiki .sYbnZ{--shiki-default:#C586C0}html pre.shiki code .sqDPy, html code.shiki .sqDPy{--shiki-default:#C8C8C8}html pre.shiki code .s9McN, html code.shiki .s9McN{--shiki-default:#4FC1FF}",{"title":32,"searchDepth":54,"depth":54,"links":1506},[1507,1508,1509,1510],{"id":929,"depth":54,"text":930},{"id":1074,"depth":54,"text":1075},{"id":1127,"depth":54,"text":1128},{"id":1427,"depth":54,"text":1428},"The TUI's interaction primitive: your own lists, and asking the user a question. A palette\nyou register is the same widget as : — identical row shapes, filtering and\nnavigation — so every extension's UI is as good as the built-in one.","md",{},"\u002Fdocs\u002Fv2\u002Ftui\u002Fapi\u002Fpalette",{"title":5,"description":1511},"docs\u002Fv2\u002Ftui\u002Fapi\u002Fpalette","3vbSFIPEru9ucOsVCe3ZL1xMIX-6tX40u2-rghemA7M",1786791207940]