[{"data":1,"prerenderedAt":2296},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fdevelopment\u002Fdesign-system\u002Fcomponents":199,"\u002Fdocs\u002Fdevelopment\u002Fdesign-system\u002Fcomponents-surround":2291},[4,9,41,111,116,132],{"title":5,"path":6,"stem":7,"icon":8},"准备","\u002Fdocs\u002Fpreparation","1.docs\u002F1.preparation","i-lucide-rocket",{"title":10,"icon":11,"path":12,"stem":13,"children":14,"page":40},"用户手册","i-lucide-book-open","\u002Fdocs\u002Fgetting-started","1.docs\u002F2.getting-started",[15,20,25,30,35],{"title":16,"path":17,"stem":18,"icon":19},"认识 UDhold","\u002Fdocs\u002Fgetting-started\u002Fwhat-is-udhold","1.docs\u002F2.getting-started\u002F1.what-is-udhold","i-lucide-info",{"title":21,"path":22,"stem":23,"icon":24},"核心概念","\u002Fdocs\u002Fgetting-started\u002Fcore-concepts","1.docs\u002F2.getting-started\u002F2.core-concepts","i-lucide-lightbulb",{"title":26,"path":27,"stem":28,"icon":29},"主面板布局","\u002Fdocs\u002Fgetting-started\u002Fmain-interface","1.docs\u002F2.getting-started\u002F3.main-interface","i-lucide-monitor",{"title":31,"path":32,"stem":33,"icon":34},"快速上手 5 分钟","\u002Fdocs\u002Fgetting-started\u002Fquick-tour","1.docs\u002F2.getting-started\u002F4.quick-tour","i-lucide-zap",{"title":36,"path":37,"stem":38,"icon":39},"常用快捷键","\u002Fdocs\u002Fgetting-started\u002Fshortcut-keys","1.docs\u002F2.getting-started\u002F5.shortcut-keys","i-lucide-keyboard",false,{"title":42,"path":43,"stem":44,"children":45,"icon":110},"核心功能","\u002Fdocs\u002Ffeatures","1.docs\u002F3.features\u002F1.index",[46,49,53,58,63,67,71,76,81,86,91,96,101,106],{"title":47,"path":43,"stem":44,"icon":48},"功能总览","i-lucide-layout-grid",{"title":50,"path":51,"stem":52,"icon":39},"快捷键","\u002Fdocs\u002Ffeatures\u002Fshortcuts","1.docs\u002F3.features\u002F10.shortcuts",{"title":54,"path":55,"stem":56,"icon":57},"AI 模型","\u002Fdocs\u002Ffeatures\u002Fai-models","1.docs\u002F3.features\u002F16.ai-models","i-lucide-bot",{"title":59,"path":60,"stem":61,"icon":62},"AI 助手","\u002Fdocs\u002Ffeatures\u002Fai-helper","1.docs\u002F3.features\u002F17.ai-helper","i-lucide-bot-message-square",{"title":64,"path":65,"stem":66,"icon":19},"关于","\u002Fdocs\u002Ffeatures\u002Fabout","1.docs\u002F3.features\u002F19.about",{"title":68,"path":69,"stem":70,"icon":29},"系统命令","\u002Fdocs\u002Ffeatures\u002Fsystem","1.docs\u002F3.features\u002F2.system",{"title":72,"path":73,"stem":74,"icon":75},"调试日志","\u002Fdocs\u002Ffeatures\u002Fdebug","1.docs\u002F3.features\u002F20.debug","i-lucide-terminal",{"title":77,"path":78,"stem":79,"icon":80},"通用设置","\u002Fdocs\u002Ffeatures\u002Fsettings","1.docs\u002F3.features\u002F21.settings","i-mdi-cog-outline",{"title":82,"path":83,"stem":84,"icon":85},"文件资源管理器","\u002Fdocs\u002Ffeatures\u002Ffiles","1.docs\u002F3.features\u002F3.files","i-lucide-folder-tree",{"title":87,"path":88,"stem":89,"icon":90},"文件树","\u002Fdocs\u002Ffeatures\u002Ffiles-tree","1.docs\u002F3.features\u002F4.files-tree","i-lucide-list-tree",{"title":92,"path":93,"stem":94,"icon":95},"文件预览","\u002Fdocs\u002Ffeatures\u002Fpreview","1.docs\u002F3.features\u002F5.preview","i-lucide-eye",{"title":97,"path":98,"stem":99,"icon":100},"本地启动","\u002Fdocs\u002Ffeatures\u002Flocal-launch","1.docs\u002F3.features\u002F6.local-launch","i-lucide-app-window",{"title":102,"path":103,"stem":104,"icon":105},"插件中心","\u002Fdocs\u002Ffeatures\u002Fplugins","1.docs\u002F3.features\u002F7.plugins","i-lucide-puzzle",{"title":107,"path":108,"stem":109,"icon":8},"快速启动","\u002Fdocs\u002Ffeatures\u002Fquick-start","1.docs\u002F3.features\u002F8.quick-start","i-lucide-star",{"title":112,"path":113,"stem":114,"icon":115},"主题","\u002Fdocs\u002Fthemes","1.docs\u002F4.themes","i-lucide-palette",{"title":117,"icon":118,"path":119,"stem":120,"children":121,"page":40},"相关协议","i-lucide-scroll","\u002Fdocs\u002Flegal","1.docs\u002F5.legal",[122,127],{"title":123,"path":124,"stem":125,"icon":126},"用户须知","\u002Fdocs\u002Flegal\u002Fuser-notice","1.docs\u002F5.legal\u002F1.user-notice","i-lucide-file-text",{"title":128,"path":129,"stem":130,"icon":131},"隐私协议","\u002Fdocs\u002Flegal\u002Fprivacy","1.docs\u002F5.legal\u002F2.privacy","i-lucide-shield-check",{"title":133,"icon":134,"path":135,"stem":136,"children":137,"page":40},"开发指南","i-lucide-code","\u002Fdocs\u002Fdevelopment","1.docs\u002F6.development",[138,156,190],{"title":139,"icon":8,"path":140,"stem":141,"children":142,"page":40},"快速开始","\u002Fdocs\u002Fdevelopment\u002Fquick-start","1.docs\u002F6.development\u002F1.quick-start",[143,147,151],{"title":144,"path":145,"stem":146,"icon":19},"介绍","\u002Fdocs\u002Fdevelopment\u002Fquick-start\u002Fintroduction","1.docs\u002F6.development\u002F1.quick-start\u002F1.introduction",{"title":148,"path":149,"stem":150,"icon":34},"快速上手","\u002Fdocs\u002Fdevelopment\u002Fquick-start\u002Fgetting-started","1.docs\u002F6.development\u002F1.quick-start\u002F2.getting-started",{"title":152,"path":153,"stem":154,"icon":155},"常见问题","\u002Fdocs\u002Fdevelopment\u002Fquick-start\u002Ffaq","1.docs\u002F6.development\u002F1.quick-start\u002F3.faq","i-lucide-circle-help",{"title":157,"icon":115,"path":158,"stem":159,"children":160,"page":40},"设计系统","\u002Fdocs\u002Fdevelopment\u002Fdesign-system","1.docs\u002F6.development\u002F2.design-system",[161,166,171,176,181,186],{"title":162,"path":163,"stem":164,"icon":165},"设计令牌","\u002Fdocs\u002Fdevelopment\u002Fdesign-system\u002Ftokens","1.docs\u002F6.development\u002F2.design-system\u002F1.tokens","i-lucide-pipette",{"title":167,"path":168,"stem":169,"icon":170},"主题与明暗模式","\u002Fdocs\u002Fdevelopment\u002Fdesign-system\u002Ftheming","1.docs\u002F6.development\u002F2.design-system\u002F2.theming","i-lucide-sun-moon",{"title":172,"path":173,"stem":174,"icon":175},"基础样式类","\u002Fdocs\u002Fdevelopment\u002Fdesign-system\u002Fbase-styles","1.docs\u002F6.development\u002F2.design-system\u002F3.base-styles","i-lucide-layout-template",{"title":177,"path":178,"stem":179,"icon":180},"图标体系","\u002Fdocs\u002Fdevelopment\u002Fdesign-system\u002Ficons","1.docs\u002F6.development\u002F2.design-system\u002F4.icons","i-lucide-shapes",{"title":182,"path":183,"stem":184,"icon":185},"通用组件","\u002Fdocs\u002Fdevelopment\u002Fdesign-system\u002Fcomponents","1.docs\u002F6.development\u002F2.design-system\u002F5.components","i-lucide-component",{"title":187,"path":188,"stem":189,"icon":48},"场景组件","\u002Fdocs\u002Fdevelopment\u002Fdesign-system\u002Fscene-components","1.docs\u002F6.development\u002F2.design-system\u002F6.scene-components",{"title":191,"icon":57,"path":192,"stem":193,"children":194,"page":40},"AI","\u002Fdocs\u002Fdevelopment\u002Fai","1.docs\u002F6.development\u002F3.ai",[195],{"title":196,"path":197,"stem":198,"icon":126},"LLMs.txt","\u002Fdocs\u002Fdevelopment\u002Fai\u002Fllms-txt","1.docs\u002F6.development\u002F3.ai\u002F1.llms-txt",{"id":200,"title":182,"body":201,"description":2284,"extension":2285,"meta":2286,"navigation":2287,"path":183,"rawbody":2288,"seo":2289,"stem":184,"__hash__":2290},"docs\u002F1.docs\u002F6.development\u002F2.design-system\u002F5.components.md",{"type":202,"value":203,"toc":2273},"minimark",[204,221,225,343,347,361,589,719,786,790,796,1148,1155,1159,1166,1406,1410,1417,1564,1567,1571,1670,1673,1677,1680,1958,1971,1991,1995,1998,2054,2061,2064,2070,2146,2262,2269],[205,206,207,211,212,215,216,220],"p",{},[208,209,210],"code",{},"@udhold\u002Fudhold-ui"," 是官方共享组件库，随官方插件工程仓库分发（",[208,213,214],{},"workspace:*"," 引用，见",[217,218,148],"a",{"href":219},"..\u002Fquick-start\u002Fgetting-started","）。组件按需 import，没有全局注册，样式与令牌体系一体。",[222,223,224],"h2",{"id":224},"引入方式",[226,227,232],"pre",{"className":228,"code":229,"language":230,"meta":231,"style":231},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F 组件\nimport { Message, ConfirmDialog, Dropdown, Slider } from '@udhold\u002Fudhold-ui\u002Fcomponents\u002Fcommon'\n\u002F\u002F 或分别引：'@udhold\u002Fudhold-ui\u002Fcomponents\u002FMessage'\n\u002F\u002F 组合式函数与工具\nimport { useMessage } from '@udhold\u002Fudhold-ui\u002Fcomponents\u002Fcommon'\nimport { useColorScheme } from '@udhold\u002Fudhold-ui\u002Fcomposables'\n","ts","",[208,233,234,243,290,296,302,322],{"__ignoreMap":231},[235,236,239],"span",{"class":237,"line":238},"line",1,[235,240,242],{"class":241},"sHwdD","\u002F\u002F 组件\n",[235,244,246,250,254,258,261,264,266,269,271,274,277,280,283,287],{"class":237,"line":245},2,[235,247,249],{"class":248},"s7zQu","import",[235,251,253],{"class":252},"sMK4o"," {",[235,255,257],{"class":256},"sTEyZ"," Message",[235,259,260],{"class":252},",",[235,262,263],{"class":256}," ConfirmDialog",[235,265,260],{"class":252},[235,267,268],{"class":256}," Dropdown",[235,270,260],{"class":252},[235,272,273],{"class":256}," Slider",[235,275,276],{"class":252}," }",[235,278,279],{"class":248}," from",[235,281,282],{"class":252}," '",[235,284,286],{"class":285},"sfazB","@udhold\u002Fudhold-ui\u002Fcomponents\u002Fcommon",[235,288,289],{"class":252},"'\n",[235,291,293],{"class":237,"line":292},3,[235,294,295],{"class":241},"\u002F\u002F 或分别引：'@udhold\u002Fudhold-ui\u002Fcomponents\u002FMessage'\n",[235,297,299],{"class":237,"line":298},4,[235,300,301],{"class":241},"\u002F\u002F 组合式函数与工具\n",[235,303,305,307,309,312,314,316,318,320],{"class":237,"line":304},5,[235,306,249],{"class":248},[235,308,253],{"class":252},[235,310,311],{"class":256}," useMessage",[235,313,276],{"class":252},[235,315,279],{"class":248},[235,317,282],{"class":252},[235,319,286],{"class":285},[235,321,289],{"class":252},[235,323,325,327,329,332,334,336,338,341],{"class":237,"line":324},6,[235,326,249],{"class":248},[235,328,253],{"class":252},[235,330,331],{"class":256}," useColorScheme",[235,333,276],{"class":252},[235,335,279],{"class":248},[235,337,282],{"class":252},[235,339,340],{"class":285},"@udhold\u002Fudhold-ui\u002Fcomposables",[235,342,289],{"class":252},[222,344,346],{"id":345},"message全局消息提示","Message：全局消息提示",[205,348,349,353,354,357,358,360],{},[350,351,352],"strong",{},"挂载一次，全局调用。"," 根组件里挂容器（",[208,355,356],{},"useMessage()"," 返回的响应式状态接给组件），之后任何地方 ",[208,359,356],{}," 直接弹消息：",[226,362,366],{"className":363,"code":364,"language":365,"meta":231,"style":231},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\n\u002F\u002F App.vue —— 挂载容器\nimport { Message, ConfirmDialog, useMessage } from '@udhold\u002Fudhold-ui\u002Fcomponents\u002Fcommon'\nconst { messageState, handleClose, handleAction, confirmState, handleConfirm, handleCancel } = useMessage()\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv id=\"app\">\u003C!-- 页面内容 -->\u003C\u002Fdiv>\n  \u003CMessage :items=\"messageState\" @close=\"handleClose\" @action-click=\"handleAction\" \u002F>\n\u003C\u002Ftemplate>\n","vue",[208,367,368,397,402,428,475,484,490,500,533,580],{"__ignoreMap":231},[235,369,370,373,377,381,384,387,390,392,394],{"class":237,"line":238},[235,371,372],{"class":252},"\u003C",[235,374,376],{"class":375},"swJcz","script",[235,378,380],{"class":379},"spNyl"," setup",[235,382,383],{"class":379}," lang",[235,385,386],{"class":252},"=",[235,388,389],{"class":252},"\"",[235,391,230],{"class":285},[235,393,389],{"class":252},[235,395,396],{"class":252},">\n",[235,398,399],{"class":237,"line":245},[235,400,401],{"class":241},"\u002F\u002F App.vue —— 挂载容器\n",[235,403,404,406,408,410,412,414,416,418,420,422,424,426],{"class":237,"line":292},[235,405,249],{"class":248},[235,407,253],{"class":252},[235,409,257],{"class":256},[235,411,260],{"class":252},[235,413,263],{"class":256},[235,415,260],{"class":252},[235,417,311],{"class":256},[235,419,276],{"class":252},[235,421,279],{"class":248},[235,423,282],{"class":252},[235,425,286],{"class":285},[235,427,289],{"class":252},[235,429,430,433,435,438,440,443,445,448,450,453,455,458,460,463,466,469,472],{"class":237,"line":298},[235,431,432],{"class":379},"const",[235,434,253],{"class":252},[235,436,437],{"class":256}," messageState",[235,439,260],{"class":252},[235,441,442],{"class":256}," handleClose",[235,444,260],{"class":252},[235,446,447],{"class":256}," handleAction",[235,449,260],{"class":252},[235,451,452],{"class":256}," confirmState",[235,454,260],{"class":252},[235,456,457],{"class":256}," handleConfirm",[235,459,260],{"class":252},[235,461,462],{"class":256}," handleCancel ",[235,464,465],{"class":252},"}",[235,467,468],{"class":252}," =",[235,470,311],{"class":471},"s2Zo4",[235,473,474],{"class":256},"()\n",[235,476,477,480,482],{"class":237,"line":304},[235,478,479],{"class":252},"\u003C\u002F",[235,481,376],{"class":375},[235,483,396],{"class":252},[235,485,486],{"class":237,"line":324},[235,487,489],{"emptyLinePlaceholder":488},true,"\n",[235,491,493,495,498],{"class":237,"line":492},7,[235,494,372],{"class":252},[235,496,497],{"class":375},"template",[235,499,396],{"class":252},[235,501,503,506,509,512,514,516,519,521,524,527,529,531],{"class":237,"line":502},8,[235,504,505],{"class":252},"  \u003C",[235,507,508],{"class":375},"div",[235,510,511],{"class":379}," id",[235,513,386],{"class":252},[235,515,389],{"class":252},[235,517,518],{"class":285},"app",[235,520,389],{"class":252},[235,522,523],{"class":252},">",[235,525,526],{"class":241},"\u003C!-- 页面内容 -->",[235,528,479],{"class":252},[235,530,508],{"class":375},[235,532,396],{"class":252},[235,534,536,538,541,544,546,548,551,553,556,558,560,563,565,568,570,572,575,577],{"class":237,"line":535},9,[235,537,505],{"class":252},[235,539,540],{"class":375},"Message",[235,542,543],{"class":379}," :items",[235,545,386],{"class":252},[235,547,389],{"class":252},[235,549,550],{"class":285},"messageState",[235,552,389],{"class":252},[235,554,555],{"class":379}," @close",[235,557,386],{"class":252},[235,559,389],{"class":252},[235,561,562],{"class":285},"handleClose",[235,564,389],{"class":252},[235,566,567],{"class":379}," @action-click",[235,569,386],{"class":252},[235,571,389],{"class":252},[235,573,574],{"class":285},"handleAction",[235,576,389],{"class":252},[235,578,579],{"class":252}," \u002F>\n",[235,581,583,585,587],{"class":237,"line":582},10,[235,584,479],{"class":252},[235,586,497],{"class":375},[235,588,396],{"class":252},[226,590,592],{"className":228,"code":591,"language":230,"meta":231,"style":231},"\u002F\u002F 任何业务组件里\nimport { useMessage } from '@udhold\u002Fudhold-ui\u002Fcomponents\u002Fcommon'\n\nconst message = useMessage()\nmessage.success('已复制颜色 #2f6fec')\nmessage.error('导出失败：文件被占用')\nmessage.warning('列表已过期，正在刷新')\nmessage.info('已切换到紧凑模式')\n",[208,593,594,599,617,621,634,659,679,699],{"__ignoreMap":231},[235,595,596],{"class":237,"line":238},[235,597,598],{"class":241},"\u002F\u002F 任何业务组件里\n",[235,600,601,603,605,607,609,611,613,615],{"class":237,"line":245},[235,602,249],{"class":248},[235,604,253],{"class":252},[235,606,311],{"class":256},[235,608,276],{"class":252},[235,610,279],{"class":248},[235,612,282],{"class":252},[235,614,286],{"class":285},[235,616,289],{"class":252},[235,618,619],{"class":237,"line":292},[235,620,489],{"emptyLinePlaceholder":488},[235,622,623,625,628,630,632],{"class":237,"line":298},[235,624,432],{"class":379},[235,626,627],{"class":256}," message ",[235,629,386],{"class":252},[235,631,311],{"class":471},[235,633,474],{"class":256},[235,635,636,639,642,645,648,651,654,656],{"class":237,"line":304},[235,637,638],{"class":256},"message",[235,640,641],{"class":252},".",[235,643,644],{"class":471},"success",[235,646,647],{"class":256},"(",[235,649,650],{"class":252},"'",[235,652,653],{"class":285},"已复制颜色 #2f6fec",[235,655,650],{"class":252},[235,657,658],{"class":256},")\n",[235,660,661,663,665,668,670,672,675,677],{"class":237,"line":324},[235,662,638],{"class":256},[235,664,641],{"class":252},[235,666,667],{"class":471},"error",[235,669,647],{"class":256},[235,671,650],{"class":252},[235,673,674],{"class":285},"导出失败：文件被占用",[235,676,650],{"class":252},[235,678,658],{"class":256},[235,680,681,683,685,688,690,692,695,697],{"class":237,"line":492},[235,682,638],{"class":256},[235,684,641],{"class":252},[235,686,687],{"class":471},"warning",[235,689,647],{"class":256},[235,691,650],{"class":252},[235,693,694],{"class":285},"列表已过期，正在刷新",[235,696,650],{"class":252},[235,698,658],{"class":256},[235,700,701,703,705,708,710,712,715,717],{"class":237,"line":502},[235,702,638],{"class":256},[235,704,641],{"class":252},[235,706,707],{"class":471},"info",[235,709,647],{"class":256},[235,711,650],{"class":252},[235,713,714],{"class":285},"已切换到紧凑模式",[235,716,650],{"class":252},[235,718,658],{"class":256},[720,721,722,735],"table",{},[723,724,725],"thead",{},[726,727,728,732],"tr",{},[729,730,731],"th",{},"参数",[729,733,734],{},"说明",[736,737,738,761,771],"tbody",{},[726,739,740,746],{},[741,742,743],"td",{},[208,744,745],{},"type",[741,747,748,750,751,750,753,750,755,750,757,760],{},[208,749,644],{}," \u002F ",[208,752,667],{},[208,754,687],{},[208,756,707],{},[208,758,759],{},"primary","，对应语义前置圆点",[726,762,763,768],{},[741,764,765],{},[208,766,767],{},"duration",[741,769,770],{},"停留时长，默认 3000ms",[726,772,773,778],{},[741,774,775],{},[208,776,777],{},"position",[741,779,780,750,783],{},[208,781,782],{},"top",[208,784,785],{},"bottom",[222,787,789],{"id":788},"confirmdialog确认弹窗","ConfirmDialog：确认弹窗",[205,791,792,793,795],{},"与 ",[208,794,356],{}," 同源，命令式调用，返回 Promise——不用自己管理弹窗状态：",[226,797,799],{"className":228,"code":798,"language":230,"meta":231,"style":231},"const { confirm, confirmWithExtra, alert } = useMessage()\n\n\u002F\u002F 二选一确认\nconst ok: boolean = await confirm({\n  title: '删除记录',\n  message: '删除后不可恢复，确定删除这 3 条记录吗？',\n  type: 'danger',          \u002F\u002F info \u002F warning \u002F danger，控制确认按钮风格\n  confirmText: '删除'\n})\nif (ok) { \u002F* 执行删除 *\u002F }\n\n\u002F\u002F 带附加复选项（如「同时删除云端数据」）\nconst result = await confirmWithExtra({\n  title: '卸载插件',\n  message: '将删除插件及其全部数据。',\n  type: 'danger',\n  extra: [{ id: 'keepData', message: '保留插件数据', defaultChecked: false }]\n})\n\u002F\u002F result.confirmed: boolean, result.extra: { keepData: boolean }\n\n\u002F\u002F 纯提示（单按钮）\nawait alert({ title: '导入完成', message: '共导入 128 条记录。' })\n",[208,800,801,828,832,837,863,880,896,915,929,935,952,957,963,981,997,1013,1028,1082,1089,1095,1100,1106],{"__ignoreMap":231},[235,802,803,805,807,810,812,815,817,820,822,824,826],{"class":237,"line":238},[235,804,432],{"class":379},[235,806,253],{"class":252},[235,808,809],{"class":256}," confirm",[235,811,260],{"class":252},[235,813,814],{"class":256}," confirmWithExtra",[235,816,260],{"class":252},[235,818,819],{"class":256}," alert ",[235,821,465],{"class":252},[235,823,468],{"class":252},[235,825,311],{"class":471},[235,827,474],{"class":256},[235,829,830],{"class":237,"line":245},[235,831,489],{"emptyLinePlaceholder":488},[235,833,834],{"class":237,"line":292},[235,835,836],{"class":241},"\u002F\u002F 二选一确认\n",[235,838,839,841,844,847,851,853,856,858,860],{"class":237,"line":298},[235,840,432],{"class":379},[235,842,843],{"class":256}," ok",[235,845,846],{"class":252},":",[235,848,850],{"class":849},"sBMFI"," boolean",[235,852,468],{"class":252},[235,854,855],{"class":248}," await",[235,857,809],{"class":471},[235,859,647],{"class":256},[235,861,862],{"class":252},"{\n",[235,864,865,868,870,872,875,877],{"class":237,"line":304},[235,866,867],{"class":375},"  title",[235,869,846],{"class":252},[235,871,282],{"class":252},[235,873,874],{"class":285},"删除记录",[235,876,650],{"class":252},[235,878,879],{"class":252},",\n",[235,881,882,885,887,889,892,894],{"class":237,"line":324},[235,883,884],{"class":375},"  message",[235,886,846],{"class":252},[235,888,282],{"class":252},[235,890,891],{"class":285},"删除后不可恢复，确定删除这 3 条记录吗？",[235,893,650],{"class":252},[235,895,879],{"class":252},[235,897,898,901,903,905,908,910,912],{"class":237,"line":492},[235,899,900],{"class":375},"  type",[235,902,846],{"class":252},[235,904,282],{"class":252},[235,906,907],{"class":285},"danger",[235,909,650],{"class":252},[235,911,260],{"class":252},[235,913,914],{"class":241},"          \u002F\u002F info \u002F warning \u002F danger，控制确认按钮风格\n",[235,916,917,920,922,924,927],{"class":237,"line":502},[235,918,919],{"class":375},"  confirmText",[235,921,846],{"class":252},[235,923,282],{"class":252},[235,925,926],{"class":285},"删除",[235,928,289],{"class":252},[235,930,931,933],{"class":237,"line":535},[235,932,465],{"class":252},[235,934,658],{"class":256},[235,936,937,940,943,946,949],{"class":237,"line":582},[235,938,939],{"class":248},"if",[235,941,942],{"class":256}," (ok) ",[235,944,945],{"class":252},"{",[235,947,948],{"class":241}," \u002F* 执行删除 *\u002F",[235,950,951],{"class":252}," }\n",[235,953,955],{"class":237,"line":954},11,[235,956,489],{"emptyLinePlaceholder":488},[235,958,960],{"class":237,"line":959},12,[235,961,962],{"class":241},"\u002F\u002F 带附加复选项（如「同时删除云端数据」）\n",[235,964,966,968,971,973,975,977,979],{"class":237,"line":965},13,[235,967,432],{"class":379},[235,969,970],{"class":256}," result ",[235,972,386],{"class":252},[235,974,855],{"class":248},[235,976,814],{"class":471},[235,978,647],{"class":256},[235,980,862],{"class":252},[235,982,984,986,988,990,993,995],{"class":237,"line":983},14,[235,985,867],{"class":375},[235,987,846],{"class":252},[235,989,282],{"class":252},[235,991,992],{"class":285},"卸载插件",[235,994,650],{"class":252},[235,996,879],{"class":252},[235,998,1000,1002,1004,1006,1009,1011],{"class":237,"line":999},15,[235,1001,884],{"class":375},[235,1003,846],{"class":252},[235,1005,282],{"class":252},[235,1007,1008],{"class":285},"将删除插件及其全部数据。",[235,1010,650],{"class":252},[235,1012,879],{"class":252},[235,1014,1016,1018,1020,1022,1024,1026],{"class":237,"line":1015},16,[235,1017,900],{"class":375},[235,1019,846],{"class":252},[235,1021,282],{"class":252},[235,1023,907],{"class":285},[235,1025,650],{"class":252},[235,1027,879],{"class":252},[235,1029,1031,1034,1036,1039,1041,1043,1045,1047,1050,1052,1054,1057,1059,1061,1064,1066,1068,1071,1073,1077,1079],{"class":237,"line":1030},17,[235,1032,1033],{"class":375},"  extra",[235,1035,846],{"class":252},[235,1037,1038],{"class":256}," [",[235,1040,945],{"class":252},[235,1042,511],{"class":375},[235,1044,846],{"class":252},[235,1046,282],{"class":252},[235,1048,1049],{"class":285},"keepData",[235,1051,650],{"class":252},[235,1053,260],{"class":252},[235,1055,1056],{"class":375}," message",[235,1058,846],{"class":252},[235,1060,282],{"class":252},[235,1062,1063],{"class":285},"保留插件数据",[235,1065,650],{"class":252},[235,1067,260],{"class":252},[235,1069,1070],{"class":375}," defaultChecked",[235,1072,846],{"class":252},[235,1074,1076],{"class":1075},"sfNiH"," false",[235,1078,276],{"class":252},[235,1080,1081],{"class":256},"]\n",[235,1083,1085,1087],{"class":237,"line":1084},18,[235,1086,465],{"class":252},[235,1088,658],{"class":256},[235,1090,1092],{"class":237,"line":1091},19,[235,1093,1094],{"class":241},"\u002F\u002F result.confirmed: boolean, result.extra: { keepData: boolean }\n",[235,1096,1098],{"class":237,"line":1097},20,[235,1099,489],{"emptyLinePlaceholder":488},[235,1101,1103],{"class":237,"line":1102},21,[235,1104,1105],{"class":241},"\u002F\u002F 纯提示（单按钮）\n",[235,1107,1109,1112,1115,1117,1119,1122,1124,1126,1129,1131,1133,1135,1137,1139,1142,1144,1146],{"class":237,"line":1108},22,[235,1110,1111],{"class":248},"await",[235,1113,1114],{"class":471}," alert",[235,1116,647],{"class":256},[235,1118,945],{"class":252},[235,1120,1121],{"class":375}," title",[235,1123,846],{"class":252},[235,1125,282],{"class":252},[235,1127,1128],{"class":285},"导入完成",[235,1130,650],{"class":252},[235,1132,260],{"class":252},[235,1134,1056],{"class":375},[235,1136,846],{"class":252},[235,1138,282],{"class":252},[235,1140,1141],{"class":285},"共导入 128 条记录。",[235,1143,650],{"class":252},[235,1145,276],{"class":252},[235,1147,658],{"class":256},[205,1149,1150,1151,1154],{},"容器同样在根组件挂一次：",[208,1152,1153],{},"\u003CConfirmDialog v-model:visible=\"confirmState.visible\" ... \u002F>","，模板见上面 Message 的 App.vue 示例。",[222,1156,1158],{"id":1157},"dropdown下拉选择","Dropdown：下拉选择",[205,1160,1161,1162,1165],{},"原生 ",[208,1163,1164],{},"select"," 的样式化封装（弹出面板跟随系统明暗）：",[226,1167,1169],{"className":363,"code":1168,"language":365,"meta":231,"style":231},"\u003Cscript setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { Dropdown } from '@udhold\u002Fudhold-ui\u002Fcomponents\u002Fcommon'\n\nconst sort = ref('time')\nconst options = [\n  { label: '按时间排序', value: 'time' },\n  { label: '按名称排序', value: 'name' }\n]\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CDropdown v-model=\"sort\" :options=\"options\" placeholder=\"选择排序方式\" \u002F>\n\u003C\u002Ftemplate>\n",[208,1170,1171,1191,1210,1228,1232,1254,1266,1299,1329,1333,1341,1345,1353,1398],{"__ignoreMap":231},[235,1172,1173,1175,1177,1179,1181,1183,1185,1187,1189],{"class":237,"line":238},[235,1174,372],{"class":252},[235,1176,376],{"class":375},[235,1178,380],{"class":379},[235,1180,383],{"class":379},[235,1182,386],{"class":252},[235,1184,389],{"class":252},[235,1186,230],{"class":285},[235,1188,389],{"class":252},[235,1190,396],{"class":252},[235,1192,1193,1195,1197,1200,1202,1204,1206,1208],{"class":237,"line":245},[235,1194,249],{"class":248},[235,1196,253],{"class":252},[235,1198,1199],{"class":256}," ref",[235,1201,276],{"class":252},[235,1203,279],{"class":248},[235,1205,282],{"class":252},[235,1207,365],{"class":285},[235,1209,289],{"class":252},[235,1211,1212,1214,1216,1218,1220,1222,1224,1226],{"class":237,"line":292},[235,1213,249],{"class":248},[235,1215,253],{"class":252},[235,1217,268],{"class":256},[235,1219,276],{"class":252},[235,1221,279],{"class":248},[235,1223,282],{"class":252},[235,1225,286],{"class":285},[235,1227,289],{"class":252},[235,1229,1230],{"class":237,"line":298},[235,1231,489],{"emptyLinePlaceholder":488},[235,1233,1234,1236,1239,1241,1243,1245,1247,1250,1252],{"class":237,"line":304},[235,1235,432],{"class":379},[235,1237,1238],{"class":256}," sort ",[235,1240,386],{"class":252},[235,1242,1199],{"class":471},[235,1244,647],{"class":256},[235,1246,650],{"class":252},[235,1248,1249],{"class":285},"time",[235,1251,650],{"class":252},[235,1253,658],{"class":256},[235,1255,1256,1258,1261,1263],{"class":237,"line":324},[235,1257,432],{"class":379},[235,1259,1260],{"class":256}," options ",[235,1262,386],{"class":252},[235,1264,1265],{"class":256}," [\n",[235,1267,1268,1271,1274,1276,1278,1281,1283,1285,1288,1290,1292,1294,1296],{"class":237,"line":492},[235,1269,1270],{"class":252},"  {",[235,1272,1273],{"class":375}," label",[235,1275,846],{"class":252},[235,1277,282],{"class":252},[235,1279,1280],{"class":285},"按时间排序",[235,1282,650],{"class":252},[235,1284,260],{"class":252},[235,1286,1287],{"class":375}," value",[235,1289,846],{"class":252},[235,1291,282],{"class":252},[235,1293,1249],{"class":285},[235,1295,650],{"class":252},[235,1297,1298],{"class":252}," },\n",[235,1300,1301,1303,1305,1307,1309,1312,1314,1316,1318,1320,1322,1325,1327],{"class":237,"line":502},[235,1302,1270],{"class":252},[235,1304,1273],{"class":375},[235,1306,846],{"class":252},[235,1308,282],{"class":252},[235,1310,1311],{"class":285},"按名称排序",[235,1313,650],{"class":252},[235,1315,260],{"class":252},[235,1317,1287],{"class":375},[235,1319,846],{"class":252},[235,1321,282],{"class":252},[235,1323,1324],{"class":285},"name",[235,1326,650],{"class":252},[235,1328,951],{"class":252},[235,1330,1331],{"class":237,"line":535},[235,1332,1081],{"class":256},[235,1334,1335,1337,1339],{"class":237,"line":582},[235,1336,479],{"class":252},[235,1338,376],{"class":375},[235,1340,396],{"class":252},[235,1342,1343],{"class":237,"line":954},[235,1344,489],{"emptyLinePlaceholder":488},[235,1346,1347,1349,1351],{"class":237,"line":959},[235,1348,372],{"class":252},[235,1350,497],{"class":375},[235,1352,396],{"class":252},[235,1354,1355,1357,1360,1363,1365,1367,1370,1372,1375,1377,1379,1382,1384,1387,1389,1391,1394,1396],{"class":237,"line":965},[235,1356,505],{"class":252},[235,1358,1359],{"class":375},"Dropdown",[235,1361,1362],{"class":379}," v-model",[235,1364,386],{"class":252},[235,1366,389],{"class":252},[235,1368,1369],{"class":285},"sort",[235,1371,389],{"class":252},[235,1373,1374],{"class":379}," :options",[235,1376,386],{"class":252},[235,1378,389],{"class":252},[235,1380,1381],{"class":285},"options",[235,1383,389],{"class":252},[235,1385,1386],{"class":379}," placeholder",[235,1388,386],{"class":252},[235,1390,389],{"class":252},[235,1392,1393],{"class":285},"选择排序方式",[235,1395,389],{"class":252},[235,1397,579],{"class":252},[235,1399,1400,1402,1404],{"class":237,"line":983},[235,1401,479],{"class":252},[235,1403,497],{"class":375},[235,1405,396],{"class":252},[222,1407,1409],{"id":1408},"hotkeyinput快捷键录制","HotkeyInput：快捷键录制",[205,1411,1412,1413,1416],{},"点击进入录制态，按下组合键即完成录入，支持修饰键组合（含 400ms 内双击同一修饰键，如 ",[208,1414,1415],{},"Ctrl+Ctrl","）与 F1–F12：",[226,1418,1420],{"className":363,"code":1419,"language":365,"meta":231,"style":231},"\u003Cscript setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { HotkeyInput } from '@udhold\u002Fudhold-ui\u002Fcomponents\u002Fcommon'\n\nconst hotkey = ref('Ctrl+Alt+P')\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CHotkeyInput v-model=\"hotkey\" placeholder=\"点击录制快捷键\" \u002F>\n\u003C\u002Ftemplate>\n",[208,1421,1422,1442,1460,1479,1483,1505,1513,1517,1525,1556],{"__ignoreMap":231},[235,1423,1424,1426,1428,1430,1432,1434,1436,1438,1440],{"class":237,"line":238},[235,1425,372],{"class":252},[235,1427,376],{"class":375},[235,1429,380],{"class":379},[235,1431,383],{"class":379},[235,1433,386],{"class":252},[235,1435,389],{"class":252},[235,1437,230],{"class":285},[235,1439,389],{"class":252},[235,1441,396],{"class":252},[235,1443,1444,1446,1448,1450,1452,1454,1456,1458],{"class":237,"line":245},[235,1445,249],{"class":248},[235,1447,253],{"class":252},[235,1449,1199],{"class":256},[235,1451,276],{"class":252},[235,1453,279],{"class":248},[235,1455,282],{"class":252},[235,1457,365],{"class":285},[235,1459,289],{"class":252},[235,1461,1462,1464,1466,1469,1471,1473,1475,1477],{"class":237,"line":292},[235,1463,249],{"class":248},[235,1465,253],{"class":252},[235,1467,1468],{"class":256}," HotkeyInput",[235,1470,276],{"class":252},[235,1472,279],{"class":248},[235,1474,282],{"class":252},[235,1476,286],{"class":285},[235,1478,289],{"class":252},[235,1480,1481],{"class":237,"line":298},[235,1482,489],{"emptyLinePlaceholder":488},[235,1484,1485,1487,1490,1492,1494,1496,1498,1501,1503],{"class":237,"line":304},[235,1486,432],{"class":379},[235,1488,1489],{"class":256}," hotkey ",[235,1491,386],{"class":252},[235,1493,1199],{"class":471},[235,1495,647],{"class":256},[235,1497,650],{"class":252},[235,1499,1500],{"class":285},"Ctrl+Alt+P",[235,1502,650],{"class":252},[235,1504,658],{"class":256},[235,1506,1507,1509,1511],{"class":237,"line":324},[235,1508,479],{"class":252},[235,1510,376],{"class":375},[235,1512,396],{"class":252},[235,1514,1515],{"class":237,"line":492},[235,1516,489],{"emptyLinePlaceholder":488},[235,1518,1519,1521,1523],{"class":237,"line":502},[235,1520,372],{"class":252},[235,1522,497],{"class":375},[235,1524,396],{"class":252},[235,1526,1527,1529,1532,1534,1536,1538,1541,1543,1545,1547,1549,1552,1554],{"class":237,"line":535},[235,1528,505],{"class":252},[235,1530,1531],{"class":375},"HotkeyInput",[235,1533,1362],{"class":379},[235,1535,386],{"class":252},[235,1537,389],{"class":252},[235,1539,1540],{"class":285},"hotkey",[235,1542,389],{"class":252},[235,1544,1386],{"class":379},[235,1546,386],{"class":252},[235,1548,389],{"class":252},[235,1550,1551],{"class":285},"点击录制快捷键",[235,1553,389],{"class":252},[235,1555,579],{"class":252},[235,1557,1558,1560,1562],{"class":237,"line":582},[235,1559,479],{"class":252},[235,1561,497],{"class":375},[235,1563,396],{"class":252},[205,1565,1566],{},"优先走宿主后端录制（结果与全局快捷键注册系统一致），宿主不支持时自动回退前端按键监听；不支持的按键会以 toast 提示。",[222,1568,1570],{"id":1569},"slider滑杆","Slider：滑杆",[226,1572,1574],{"className":363,"code":1573,"language":365,"meta":231,"style":231},"\u003CSlider v-model=\"opacity\" :min=\"30\" :max=\"100\" :step=\"5\" :formatter=\"v => v + '%'\" \u002F>\n",[208,1575,1576],{"__ignoreMap":231},[235,1577,1578,1580,1583,1585,1587,1589,1592,1594,1597,1600,1602,1604,1608,1610,1612,1615,1617,1619,1622,1624,1626,1629,1631,1633,1636,1638,1640,1643,1645,1647,1651,1654,1657,1660,1662,1665,1668],{"class":237,"line":238},[235,1579,372],{"class":252},[235,1581,1582],{"class":375},"Slider",[235,1584,1362],{"class":379},[235,1586,386],{"class":252},[235,1588,389],{"class":252},[235,1590,1591],{"class":256},"opacity",[235,1593,389],{"class":252},[235,1595,1596],{"class":252}," :",[235,1598,1599],{"class":379},"min",[235,1601,386],{"class":252},[235,1603,389],{"class":252},[235,1605,1607],{"class":1606},"sbssI","30",[235,1609,389],{"class":252},[235,1611,1596],{"class":252},[235,1613,1614],{"class":379},"max",[235,1616,386],{"class":252},[235,1618,389],{"class":252},[235,1620,1621],{"class":1606},"100",[235,1623,389],{"class":252},[235,1625,1596],{"class":252},[235,1627,1628],{"class":379},"step",[235,1630,386],{"class":252},[235,1632,389],{"class":252},[235,1634,1635],{"class":1606},"5",[235,1637,389],{"class":252},[235,1639,1596],{"class":252},[235,1641,1642],{"class":379},"formatter",[235,1644,386],{"class":252},[235,1646,389],{"class":252},[235,1648,1650],{"class":1649},"sHdIc","v",[235,1652,1653],{"class":379}," =>",[235,1655,1656],{"class":256}," v ",[235,1658,1659],{"class":252},"+",[235,1661,282],{"class":252},[235,1663,1664],{"class":285},"%",[235,1666,1667],{"class":252},"'\"",[235,1669,579],{"class":256},[205,1671,1672],{},"轨道已按主色渐变渲染，无需额外样式。",[222,1674,1676],{"id":1675},"detailpanel二级详情面板","DetailPanel：二级详情面板",[205,1678,1679],{},"覆盖在内容区上方的二级页面（无遮罩、带滑入过渡），配「返回」顶栏——列表页点进详情页的标准形态：",[226,1681,1683],{"className":363,"code":1682,"language":365,"meta":231,"style":231},"\u003Cscript setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { DetailPanel } from '@udhold\u002Fudhold-ui\u002Fcomponents\u002Fcommon'\nconst detailId = ref\u003Cstring | null>(null)\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CTransition name=\"slide\">\n    \u003CDetailPanel v-if=\"detailId\" :title=\"'详情 #' + detailId\" @back=\"detailId = null\">\n      \u003Ctemplate #header-right>\n        \u003Cbutton class=\"icon-btn\">\u003Cspan class=\"i-z-copy w-4 h-4\" \u002F>\u003C\u002Fbutton>\n      \u003C\u002Ftemplate>\n      \u003C!-- 详情内容 -->\n    \u003C\u002FDetailPanel>\n  \u003C\u002FTransition>\n\u003C\u002Ftemplate>\n",[208,1684,1685,1705,1723,1742,1773,1781,1785,1793,1814,1860,1875,1918,1927,1932,1941,1950],{"__ignoreMap":231},[235,1686,1687,1689,1691,1693,1695,1697,1699,1701,1703],{"class":237,"line":238},[235,1688,372],{"class":252},[235,1690,376],{"class":375},[235,1692,380],{"class":379},[235,1694,383],{"class":379},[235,1696,386],{"class":252},[235,1698,389],{"class":252},[235,1700,230],{"class":285},[235,1702,389],{"class":252},[235,1704,396],{"class":252},[235,1706,1707,1709,1711,1713,1715,1717,1719,1721],{"class":237,"line":245},[235,1708,249],{"class":248},[235,1710,253],{"class":252},[235,1712,1199],{"class":256},[235,1714,276],{"class":252},[235,1716,279],{"class":248},[235,1718,282],{"class":252},[235,1720,365],{"class":285},[235,1722,289],{"class":252},[235,1724,1725,1727,1729,1732,1734,1736,1738,1740],{"class":237,"line":292},[235,1726,249],{"class":248},[235,1728,253],{"class":252},[235,1730,1731],{"class":256}," DetailPanel",[235,1733,276],{"class":252},[235,1735,279],{"class":248},[235,1737,282],{"class":252},[235,1739,286],{"class":285},[235,1741,289],{"class":252},[235,1743,1744,1746,1749,1751,1753,1755,1758,1761,1764,1766,1768,1771],{"class":237,"line":298},[235,1745,432],{"class":379},[235,1747,1748],{"class":256}," detailId ",[235,1750,386],{"class":252},[235,1752,1199],{"class":471},[235,1754,372],{"class":252},[235,1756,1757],{"class":849},"string",[235,1759,1760],{"class":252}," |",[235,1762,1763],{"class":849}," null",[235,1765,523],{"class":252},[235,1767,647],{"class":256},[235,1769,1770],{"class":252},"null",[235,1772,658],{"class":256},[235,1774,1775,1777,1779],{"class":237,"line":304},[235,1776,479],{"class":252},[235,1778,376],{"class":375},[235,1780,396],{"class":252},[235,1782,1783],{"class":237,"line":324},[235,1784,489],{"emptyLinePlaceholder":488},[235,1786,1787,1789,1791],{"class":237,"line":492},[235,1788,372],{"class":252},[235,1790,497],{"class":375},[235,1792,396],{"class":252},[235,1794,1795,1797,1800,1803,1805,1807,1810,1812],{"class":237,"line":502},[235,1796,505],{"class":252},[235,1798,1799],{"class":375},"Transition",[235,1801,1802],{"class":379}," name",[235,1804,386],{"class":252},[235,1806,389],{"class":252},[235,1808,1809],{"class":285},"slide",[235,1811,389],{"class":252},[235,1813,396],{"class":252},[235,1815,1816,1819,1822,1825,1827,1829,1832,1834,1837,1839,1841,1844,1846,1849,1851,1853,1856,1858],{"class":237,"line":535},[235,1817,1818],{"class":252},"    \u003C",[235,1820,1821],{"class":375},"DetailPanel",[235,1823,1824],{"class":379}," v-if",[235,1826,386],{"class":252},[235,1828,389],{"class":252},[235,1830,1831],{"class":285},"detailId",[235,1833,389],{"class":252},[235,1835,1836],{"class":379}," :title",[235,1838,386],{"class":252},[235,1840,389],{"class":252},[235,1842,1843],{"class":285},"'详情 #' + detailId",[235,1845,389],{"class":252},[235,1847,1848],{"class":379}," @back",[235,1850,386],{"class":252},[235,1852,389],{"class":252},[235,1854,1855],{"class":285},"detailId = null",[235,1857,389],{"class":252},[235,1859,396],{"class":252},[235,1861,1862,1865,1867,1870,1873],{"class":237,"line":582},[235,1863,1864],{"class":252},"      \u003C",[235,1866,497],{"class":375},[235,1868,1869],{"class":252}," #",[235,1871,1872],{"class":379},"header-right",[235,1874,396],{"class":252},[235,1876,1877,1880,1883,1886,1888,1890,1893,1895,1898,1900,1902,1904,1906,1909,1911,1914,1916],{"class":237,"line":954},[235,1878,1879],{"class":252},"        \u003C",[235,1881,1882],{"class":375},"button",[235,1884,1885],{"class":379}," class",[235,1887,386],{"class":252},[235,1889,389],{"class":252},[235,1891,1892],{"class":285},"icon-btn",[235,1894,389],{"class":252},[235,1896,1897],{"class":252},">\u003C",[235,1899,235],{"class":375},[235,1901,1885],{"class":379},[235,1903,386],{"class":252},[235,1905,389],{"class":252},[235,1907,1908],{"class":285},"i-z-copy w-4 h-4",[235,1910,389],{"class":252},[235,1912,1913],{"class":252}," \u002F>\u003C\u002F",[235,1915,1882],{"class":375},[235,1917,396],{"class":252},[235,1919,1920,1923,1925],{"class":237,"line":959},[235,1921,1922],{"class":252},"      \u003C\u002F",[235,1924,497],{"class":375},[235,1926,396],{"class":252},[235,1928,1929],{"class":237,"line":965},[235,1930,1931],{"class":241},"      \u003C!-- 详情内容 -->\n",[235,1933,1934,1937,1939],{"class":237,"line":983},[235,1935,1936],{"class":252},"    \u003C\u002F",[235,1938,1821],{"class":375},[235,1940,396],{"class":252},[235,1942,1943,1946,1948],{"class":237,"line":999},[235,1944,1945],{"class":252},"  \u003C\u002F",[235,1947,1799],{"class":375},[235,1949,396],{"class":252},[235,1951,1952,1954,1956],{"class":237,"line":1015},[235,1953,479],{"class":252},[235,1955,497],{"class":375},[235,1957,396],{"class":252},[205,1959,1960,1961,750,1963,1966,1967,1970],{},"组件自带 ",[208,1962,1809],{},[208,1964,1965],{},"slide-reverse"," 过渡类，供 ",[208,1968,1969],{},"\u003CTransition>"," 做一级↔二级切换动画。",[1972,1973,1974],"callout",{"color":759,"icon":19},[205,1975,1976,1978,1979,1982,1983,1986,1987,1990],{},[208,1977,1821],{}," 内部使用 ",[208,1980,1981],{},"i-z-back"," 图标——你的工程图标集里必须有 ",[208,1984,1985],{},"back.svg","（见",[217,1988,177],{"href":1989},".\u002Ficons","），否则返回按钮空白。",[222,1992,1994],{"id":1993},"adaptiveicon自适应位图图标","AdaptiveIcon：自适应位图图标",[205,1996,1997],{},"位图 logo 在暗色模式下会隐形的痛点，交给它处理：自动分析图片主色，需要时反色：",[226,1999,2001],{"className":363,"code":2000,"language":365,"meta":231,"style":231},"\u003CAdaptiveIcon :src=\"provider.logo\" alt=\"服务商图标\" class=\"w-5 h-5\" \u002F>\n",[208,2002,2003],{"__ignoreMap":231},[235,2004,2005,2007,2010,2012,2015,2017,2019,2022,2024,2027,2029,2032,2034,2036,2039,2041,2043,2045,2047,2050,2052],{"class":237,"line":238},[235,2006,372],{"class":252},[235,2008,2009],{"class":375},"AdaptiveIcon",[235,2011,1596],{"class":252},[235,2013,2014],{"class":379},"src",[235,2016,386],{"class":252},[235,2018,389],{"class":252},[235,2020,2021],{"class":256},"provider",[235,2023,641],{"class":252},[235,2025,2026],{"class":256},"logo",[235,2028,389],{"class":252},[235,2030,2031],{"class":379}," alt",[235,2033,386],{"class":252},[235,2035,389],{"class":252},[235,2037,2038],{"class":285},"服务商图标",[235,2040,389],{"class":252},[235,2042,1885],{"class":379},[235,2044,386],{"class":252},[235,2046,389],{"class":252},[235,2048,2049],{"class":285},"w-5 h-5",[235,2051,389],{"class":252},[235,2053,579],{"class":252},[205,2055,2056,2057,2060],{},"懒分析（进入视口前 100px 才开始），",[208,2058,2059],{},"forceAdaptive"," 属性可跳过检测强制暗色反色。",[222,2062,2063],{"id":2063},"工具函数",[205,2065,2066,2069],{},[208,2067,2068],{},"@udhold\u002Fudhold-ui\u002Futils"," 里几个高频工具：",[720,2071,2072,2082],{},[723,2073,2074],{},[726,2075,2076,2079],{},[729,2077,2078],{},"函数",[729,2080,2081],{},"用途",[736,2083,2084,2098,2108,2122],{},[726,2085,2086,2091],{},[741,2087,2088],{},[208,2089,2090],{},"setupThemeSync()",[741,2092,2093,2094,2097],{},"主题联动总入口（",[217,2095,167],{"href":2096},".\u002Ftheming","）",[726,2099,2100,2105],{},[741,2101,2102],{},[208,2103,2104],{},"isDarkMode()",[741,2106,2107],{},"同步判断当前是否暗色",[726,2109,2110,2115],{},[741,2111,2112],{},[208,2113,2114],{},"weightedSearch(items, query, fields)",[741,2116,2117,2118,2121],{},"多字段加权搜索：",[208,2119,2120],{},"fields"," 里给每个字段配权重，命中累加按分数排序，做插件内列表过滤很好用",[726,2123,2124,2129],{},[741,2125,2126],{},[208,2127,2128],{},"setupPlatformClass()",[741,2130,2131,2132,2135,2136,750,2139,750,2142,2145],{},"给 ",[208,2133,2134],{},"html"," 加 ",[208,2137,2138],{},"os-windows",[208,2140,2141],{},"os-mac",[208,2143,2144],{},"os-linux"," 类，CSS 里做平台差异适配",[226,2147,2149],{"className":228,"code":2148,"language":230,"meta":231,"style":231},"import { weightedSearch } from '@udhold\u002Fudhold-ui\u002Futils'\n\nconst result = weightedSearch(commands, keyword, [\n  { value: c => c.name, weight: 3 },\n  { value: c => c.description, weight: 1 }\n])\n",[208,2150,2151,2170,2174,2196,2227,2257],{"__ignoreMap":231},[235,2152,2153,2155,2157,2160,2162,2164,2166,2168],{"class":237,"line":238},[235,2154,249],{"class":248},[235,2156,253],{"class":252},[235,2158,2159],{"class":256}," weightedSearch",[235,2161,276],{"class":252},[235,2163,279],{"class":248},[235,2165,282],{"class":252},[235,2167,2068],{"class":285},[235,2169,289],{"class":252},[235,2171,2172],{"class":237,"line":245},[235,2173,489],{"emptyLinePlaceholder":488},[235,2175,2176,2178,2180,2182,2184,2187,2189,2192,2194],{"class":237,"line":292},[235,2177,432],{"class":379},[235,2179,970],{"class":256},[235,2181,386],{"class":252},[235,2183,2159],{"class":471},[235,2185,2186],{"class":256},"(commands",[235,2188,260],{"class":252},[235,2190,2191],{"class":256}," keyword",[235,2193,260],{"class":252},[235,2195,1265],{"class":256},[235,2197,2198,2200,2202,2204,2207,2209,2211,2213,2215,2217,2220,2222,2225],{"class":237,"line":298},[235,2199,1270],{"class":252},[235,2201,1287],{"class":471},[235,2203,846],{"class":252},[235,2205,2206],{"class":1649}," c",[235,2208,1653],{"class":379},[235,2210,2206],{"class":256},[235,2212,641],{"class":252},[235,2214,1324],{"class":256},[235,2216,260],{"class":252},[235,2218,2219],{"class":375}," weight",[235,2221,846],{"class":252},[235,2223,2224],{"class":1606}," 3",[235,2226,1298],{"class":252},[235,2228,2229,2231,2233,2235,2237,2239,2241,2243,2246,2248,2250,2252,2255],{"class":237,"line":304},[235,2230,1270],{"class":252},[235,2232,1287],{"class":471},[235,2234,846],{"class":252},[235,2236,2206],{"class":1649},[235,2238,1653],{"class":379},[235,2240,2206],{"class":256},[235,2242,641],{"class":252},[235,2244,2245],{"class":256},"description",[235,2247,260],{"class":252},[235,2249,2219],{"class":375},[235,2251,846],{"class":252},[235,2253,2254],{"class":1606}," 1",[235,2256,951],{"class":252},[235,2258,2259],{"class":237,"line":324},[235,2260,2261],{"class":256},"])\n",[205,2263,2264,2265,2268],{},"更高层的场景组件（加载态、搜索列表、代码块、侧边导航）看下一篇",[217,2266,187],{"href":2267},".\u002Fscene-components","。",[2270,2271,2272],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":231,"searchDepth":245,"depth":245,"links":2274},[2275,2276,2277,2278,2279,2280,2281,2282,2283],{"id":224,"depth":245,"text":224},{"id":345,"depth":245,"text":346},{"id":788,"depth":245,"text":789},{"id":1157,"depth":245,"text":1158},{"id":1408,"depth":245,"text":1409},{"id":1569,"depth":245,"text":1570},{"id":1675,"depth":245,"text":1676},{"id":1993,"depth":245,"text":1994},{"id":2063,"depth":245,"text":2063},"@udhold\u002Fudhold-ui 通用组件参考：消息提示、确认弹窗、下拉框、快捷键录制、滑杆、详情面板与自适应图标。","md",{},{"icon":185},"---\ntitle: 通用组件\ndescription: @udhold\u002Fudhold-ui 通用组件参考：消息提示、确认弹窗、下拉框、快捷键录制、滑杆、详情面板与自适应图标。\nnavigation:\n  icon: i-lucide-component\n---\n\n`@udhold\u002Fudhold-ui` 是官方共享组件库，随官方插件工程仓库分发（`workspace:*` 引用，见[快速上手](..\u002Fquick-start\u002Fgetting-started)）。组件按需 import，没有全局注册，样式与令牌体系一体。\n\n## 引入方式\n\n```ts\n\u002F\u002F 组件\nimport { Message, ConfirmDialog, Dropdown, Slider } from '@udhold\u002Fudhold-ui\u002Fcomponents\u002Fcommon'\n\u002F\u002F 或分别引：'@udhold\u002Fudhold-ui\u002Fcomponents\u002FMessage'\n\u002F\u002F 组合式函数与工具\nimport { useMessage } from '@udhold\u002Fudhold-ui\u002Fcomponents\u002Fcommon'\nimport { useColorScheme } from '@udhold\u002Fudhold-ui\u002Fcomposables'\n```\n\n## Message：全局消息提示\n\n**挂载一次，全局调用。** 根组件里挂容器（`useMessage()` 返回的响应式状态接给组件），之后任何地方 `useMessage()` 直接弹消息：\n\n```vue\n\u003Cscript setup lang=\"ts\">\n\u002F\u002F App.vue —— 挂载容器\nimport { Message, ConfirmDialog, useMessage } from '@udhold\u002Fudhold-ui\u002Fcomponents\u002Fcommon'\nconst { messageState, handleClose, handleAction, confirmState, handleConfirm, handleCancel } = useMessage()\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv id=\"app\">\u003C!-- 页面内容 -->\u003C\u002Fdiv>\n  \u003CMessage :items=\"messageState\" @close=\"handleClose\" @action-click=\"handleAction\" \u002F>\n\u003C\u002Ftemplate>\n```\n\n```ts\n\u002F\u002F 任何业务组件里\nimport { useMessage } from '@udhold\u002Fudhold-ui\u002Fcomponents\u002Fcommon'\n\nconst message = useMessage()\nmessage.success('已复制颜色 #2f6fec')\nmessage.error('导出失败：文件被占用')\nmessage.warning('列表已过期，正在刷新')\nmessage.info('已切换到紧凑模式')\n```\n\n| 参数 | 说明 |\n|------|------|\n| `type` | `success` \u002F `error` \u002F `warning` \u002F `info` \u002F `primary`，对应语义前置圆点 |\n| `duration` | 停留时长，默认 3000ms |\n| `position` | `top` \u002F `bottom` |\n\n## ConfirmDialog：确认弹窗\n\n与 `useMessage()` 同源，命令式调用，返回 Promise——不用自己管理弹窗状态：\n\n```ts\nconst { confirm, confirmWithExtra, alert } = useMessage()\n\n\u002F\u002F 二选一确认\nconst ok: boolean = await confirm({\n  title: '删除记录',\n  message: '删除后不可恢复，确定删除这 3 条记录吗？',\n  type: 'danger',          \u002F\u002F info \u002F warning \u002F danger，控制确认按钮风格\n  confirmText: '删除'\n})\nif (ok) { \u002F* 执行删除 *\u002F }\n\n\u002F\u002F 带附加复选项（如「同时删除云端数据」）\nconst result = await confirmWithExtra({\n  title: '卸载插件',\n  message: '将删除插件及其全部数据。',\n  type: 'danger',\n  extra: [{ id: 'keepData', message: '保留插件数据', defaultChecked: false }]\n})\n\u002F\u002F result.confirmed: boolean, result.extra: { keepData: boolean }\n\n\u002F\u002F 纯提示（单按钮）\nawait alert({ title: '导入完成', message: '共导入 128 条记录。' })\n```\n\n容器同样在根组件挂一次：`\u003CConfirmDialog v-model:visible=\"confirmState.visible\" ... \u002F>`，模板见上面 Message 的 App.vue 示例。\n\n## Dropdown：下拉选择\n\n原生 `select` 的样式化封装（弹出面板跟随系统明暗）：\n\n```vue\n\u003Cscript setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { Dropdown } from '@udhold\u002Fudhold-ui\u002Fcomponents\u002Fcommon'\n\nconst sort = ref('time')\nconst options = [\n  { label: '按时间排序', value: 'time' },\n  { label: '按名称排序', value: 'name' }\n]\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CDropdown v-model=\"sort\" :options=\"options\" placeholder=\"选择排序方式\" \u002F>\n\u003C\u002Ftemplate>\n```\n\n## HotkeyInput：快捷键录制\n\n点击进入录制态，按下组合键即完成录入，支持修饰键组合（含 400ms 内双击同一修饰键，如 `Ctrl+Ctrl`）与 F1–F12：\n\n```vue\n\u003Cscript setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { HotkeyInput } from '@udhold\u002Fudhold-ui\u002Fcomponents\u002Fcommon'\n\nconst hotkey = ref('Ctrl+Alt+P')\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CHotkeyInput v-model=\"hotkey\" placeholder=\"点击录制快捷键\" \u002F>\n\u003C\u002Ftemplate>\n```\n\n优先走宿主后端录制（结果与全局快捷键注册系统一致），宿主不支持时自动回退前端按键监听；不支持的按键会以 toast 提示。\n\n## Slider：滑杆\n\n```vue\n\u003CSlider v-model=\"opacity\" :min=\"30\" :max=\"100\" :step=\"5\" :formatter=\"v => v + '%'\" \u002F>\n```\n\n轨道已按主色渐变渲染，无需额外样式。\n\n## DetailPanel：二级详情面板\n\n覆盖在内容区上方的二级页面（无遮罩、带滑入过渡），配「返回」顶栏——列表页点进详情页的标准形态：\n\n```vue\n\u003Cscript setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { DetailPanel } from '@udhold\u002Fudhold-ui\u002Fcomponents\u002Fcommon'\nconst detailId = ref\u003Cstring | null>(null)\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CTransition name=\"slide\">\n    \u003CDetailPanel v-if=\"detailId\" :title=\"'详情 #' + detailId\" @back=\"detailId = null\">\n      \u003Ctemplate #header-right>\n        \u003Cbutton class=\"icon-btn\">\u003Cspan class=\"i-z-copy w-4 h-4\" \u002F>\u003C\u002Fbutton>\n      \u003C\u002Ftemplate>\n      \u003C!-- 详情内容 -->\n    \u003C\u002FDetailPanel>\n  \u003C\u002FTransition>\n\u003C\u002Ftemplate>\n```\n\n组件自带 `slide` \u002F `slide-reverse` 过渡类，供 `\u003CTransition>` 做一级↔二级切换动画。\n\n::callout{icon=\"i-lucide-info\" color=\"primary\"}\n`DetailPanel` 内部使用 `i-z-back` 图标——你的工程图标集里必须有 `back.svg`（见[图标体系](.\u002Ficons)），否则返回按钮空白。\n::\n\n## AdaptiveIcon：自适应位图图标\n\n位图 logo 在暗色模式下会隐形的痛点，交给它处理：自动分析图片主色，需要时反色：\n\n```vue\n\u003CAdaptiveIcon :src=\"provider.logo\" alt=\"服务商图标\" class=\"w-5 h-5\" \u002F>\n```\n\n懒分析（进入视口前 100px 才开始），`forceAdaptive` 属性可跳过检测强制暗色反色。\n\n## 工具函数\n\n`@udhold\u002Fudhold-ui\u002Futils` 里几个高频工具：\n\n| 函数 | 用途 |\n|------|------|\n| `setupThemeSync()` | 主题联动总入口（[主题与明暗模式](.\u002Ftheming)） |\n| `isDarkMode()` | 同步判断当前是否暗色 |\n| `weightedSearch(items, query, fields)` | 多字段加权搜索：`fields` 里给每个字段配权重，命中累加按分数排序，做插件内列表过滤很好用 |\n| `setupPlatformClass()` | 给 `html` 加 `os-windows` \u002F `os-mac` \u002F `os-linux` 类，CSS 里做平台差异适配 |\n\n```ts\nimport { weightedSearch } from '@udhold\u002Fudhold-ui\u002Futils'\n\nconst result = weightedSearch(commands, keyword, [\n  { value: c => c.name, weight: 3 },\n  { value: c => c.description, weight: 1 }\n])\n```\n\n更高层的场景组件（加载态、搜索列表、代码块、侧边导航）看下一篇[场景组件](.\u002Fscene-components)。\n",{"title":182,"description":2284},"rArKGFoK12e489XjdtySn9tAKV6ALRwAxOJ_sw-XWvs",[2292,2294],{"title":177,"path":178,"stem":179,"description":2293,"icon":180,"children":-1},"本地 SVG 图标集（z 集合）、UnoCSS 图标配置与图标跟随主题的做法。",{"title":187,"path":188,"stem":189,"description":2295,"icon":48,"children":-1},"LoadingState、SearchList、CodeBlock、SidebarNav 四个场景化组件，覆盖加载、搜索、代码展示与侧边导航。",1793010251388]