[{"data":1,"prerenderedAt":2166},["ShallowReactive",2],{"navigation_docs":3,"-development-m3-components-spec":61,"-development-m3-components-spec-surround":2163},[4,36,46],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":35},"快速开始","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"简介","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":16,"path":17,"stem":18,"icon":19},"安装与构建","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"如何使用","\u002Fgetting-started\u002Fusage","1.getting-started\u002F3.usage","i-lucide-play",{"title":26,"path":27,"stem":28,"icon":29},"项目结构","\u002Fgetting-started\u002Fproject-structure","1.getting-started\u002F4.project-structure","i-lucide-folder-tree",{"title":31,"path":32,"stem":33,"icon":34},"里程碑","\u002Fgetting-started\u002Fmilestones","1.getting-started\u002F5.milestones","i-lucide-map",false,{"title":37,"icon":38,"path":39,"stem":40,"children":41,"page":35},"设计","i-lucide-drafting-compass","\u002Fdesign","2.design",[42],{"title":43,"path":44,"stem":45,"icon":38},"技术方案","\u002Fdesign\u002Ftechnical-design","2.design\u002F1.technical-design",{"title":47,"icon":48,"path":49,"stem":50,"children":51,"page":35},"开发","i-lucide-puzzle","\u002Fdevelopment","3.development",[52,56],{"title":53,"path":54,"stem":55,"icon":48},"组件开发流程","\u002Fdevelopment\u002Fcomponent-workflow","3.development\u002F1.component-workflow",{"title":57,"path":58,"stem":59,"icon":60},"M3 组件规范对照表","\u002Fdevelopment\u002Fm3-components-spec","3.development\u002F2.m3-components-spec","i-lucide-clipboard-list",{"id":62,"title":57,"body":63,"description":2156,"extension":2157,"links":2158,"meta":2159,"navigation":2160,"path":58,"seo":2161,"stem":59,"__hash__":2162},"docs\u002F3.development\u002F2.m3-components-spec.md",{"type":64,"value":65,"toc":2120},"minimark",[66,70,86,91,96,99,238,262,266,282,390,395,398,402,406,416,420,561,565,650,652,656,659,807,810,871,873,877,880,959,963,1085,1090,1093,1138,1140,1144,1148,1246,1249,1333,1335,1339,1342,1348,1351,1476,1479,1553,1555,1559,1562,1568,1571,1743,1746,1788,1790,1794,2094,2098,2116],[67,68,57],"h1",{"id":69},"m3-组件规范对照表",[71,72,73],"blockquote",{},[74,75,76,77,81,82,85],"p",{},"来源：shadcn\u002Fui 官方文档 + 源码（",[78,79,80],"code",{},"apps\u002Fv4\u002Fregistry\u002Fbases\u002Fbase\u002Fui\u002F*.tsx"," + ",[78,83,84],{},"apps\u002Fv4\u002Fregistry\u002Fstyles\u002Fstyle-luma.css","），抓取于 2026-08-18。\n依据：组件开发流程铁律（先研究 → 输出对照表 → 确认 → 实现）。",[87,88,90],"h2",{"id":89},"_0-公共决策跨组件","0. 公共决策（跨组件）",[92,93,95],"h3",{"id":94},"_01-新增-design-tokensthememanager","0.1 新增 Design Tokens（ThemeManager）",[74,97,98],{},"shadcn 语义中 M3 组件需要但当前 tokens 缺失的项：",[100,101,102,124],"table",{},[103,104,105],"thead",{},[106,107,108,112,115,118,121],"tr",{},[109,110,111],"th",{},"新 Token",[109,113,114],{},"light",[109,116,117],{},"dark",[109,119,120],{},"对应 shadcn 默认值",[109,122,123],{},"用途",[125,126,127,151,173,196,217],"tbody",{},[106,128,129,135,140,145,148],{},[130,131,132],"td",{},[78,133,134],{},"card",[130,136,137],{},[78,138,139],{},"#ffffff",[130,141,142],{},[78,143,144],{},"#09090b",[130,146,147],{},"bg-card",[130,149,150],{},"Card 底色（= background）",[106,152,153,158,162,167,170],{},[130,154,155],{},[78,156,157],{},"cardForeground",[130,159,160],{},[78,161,144],{},[130,163,164],{},[78,165,166],{},"#fafafa",[130,168,169],{},"text-card-foreground",[130,171,172],{},"Card 正文色（= foreground）",[106,174,175,180,185,190,193],{},[130,176,177],{},[78,178,179],{},"input",[130,181,182],{},[78,183,184],{},"#e4e4e7",[130,186,187],{},[78,188,189],{},"#27272a",[130,191,192],{},"bg-input",[130,194,195],{},"Input 底色（= 本主题 border 值）",[106,197,198,203,207,211,214],{},[130,199,200],{},[78,201,202],{},"popover",[130,204,205],{},[78,206,139],{},[130,208,209],{},[78,210,144],{},[130,212,213],{},"bg-popover",[130,215,216],{},"Dialog\u002F浮层底色（= background）",[106,218,219,224,228,232,235],{},[130,220,221],{},[78,222,223],{},"popoverForeground",[130,225,226],{},[78,227,144],{},[130,229,230],{},[78,231,166],{},[130,233,234],{},"text-popover-foreground",[130,236,237],{},"浮层正文色（= foreground）",[239,240,241,259],"ul",{},[242,243,244,247,248,250,251,250,253,250,255,250,257],"li",{},[78,245,246],{},"QtShadcnTheme.qml"," 同步暴露只读属性：",[78,249,134],{}," ",[78,252,157],{},[78,254,179],{},[78,256,202],{},[78,258,223],{},[242,260,261],{},"light\u002Fdark 两套 tokens 各加 5 项（值如上，与背景\u002F边框体系自洽）",[92,263,265],{"id":264},"_02-圆角体系决策v4-激进大圆角-vs-项目既有体系","0.2 圆角体系决策（v4 激进大圆角 vs 项目既有体系）",[74,267,268,269,272,273,276,277,281],{},"v4 luma 风格大量使用 ",[78,270,271],{},"rounded-3xl","(24px) \u002F ",[78,274,275],{},"rounded-4xl","(32px)，与本项目 M2 已定体系\n（控件 6px \u002F 容器 8px）冲突。",[278,279,280],"strong",{},"决策：遵循项目既有体系，不跟 v4 大圆角","：",[100,283,284,300],{},[103,285,286],{},[106,287,288,291,294,297],{},[109,289,290],{},"组件",[109,292,293],{},"v4 官方",[109,295,296],{},"QtShadcn 采用",[109,298,299],{},"理由",[125,301,302,319,333,349,362,376],{},[106,303,304,307,310,316],{},[130,305,306],{},"Card 容器",[130,308,309],{},"rounded-4xl (32px)",[130,311,312,315],{},[78,313,314],{},"theme.radius"," (8px)",[130,317,318],{},"项目既定「radius 8 用于卡片\u002F容器」",[106,320,321,324,327,330],{},[130,322,323],{},"Input",[130,325,326],{},"rounded-3xl (24px)",[130,328,329],{},"6px（控件级）",[130,331,332],{},"与 ShadcnButton 一致",[106,334,335,338,340,346],{},[130,336,337],{},"Badge",[130,339,326],{},[130,341,342,343],{},"胶囊 ",[78,344,345],{},"radius: 999",[130,347,348],{},"badge 惯例为胶囊（v4 24px 亦近胶囊）",[106,350,351,354,357,359],{},[130,352,353],{},"Switch",[130,355,356],{},"rounded-full",[130,358,356],{},[130,360,361],{},"开关天然胶囊，无冲突",[106,363,364,367,369,373],{},[130,365,366],{},"TabsList",[130,368,356],{},[130,370,371,315],{},[78,372,314],{},[130,374,375],{},"容器级；胶囊与按钮族不协调",[106,377,378,381,383,387],{},[130,379,380],{},"Dialog",[130,382,309],{},[130,384,385,315],{},[78,386,314],{},[130,388,389],{},"容器级",[71,391,392],{},[74,393,394],{},"若后续想对齐 v4 大圆角，仅需改各组件圆角属性，不影响 token 体系。",[396,397],"hr",{},[87,399,401],{"id":400},"_1-shadcncard纯组合组件无-qqc-基类","1. ShadcnCard（纯组合组件，无 QQC 基类）",[92,403,405],{"id":404},"结构对齐-shadcn-组合方式","结构（对齐 shadcn 组合方式）",[407,408,413],"pre",{"className":409,"code":411,"language":412},[410],"language-text","Card（容器）\n├── CardHeader  （padding、间距，可含 title\u002Fdescription\u002Faction）\n│   ├── CardTitle        （font-medium, text-base=16px）\n│   ├── CardDescription  （text-sm=14px, mutedForeground）\n│   └── CardAction       （右上角动作区，可选）\n├── CardContent （内容区）\n└── CardFooter  （flex 横向，底部按钮区）\n","text",[78,414,411],{"__ignoreMap":415},"",[92,417,419],{"id":418},"shadcn-规范值","shadcn 规范值",[100,421,422,435],{},[103,423,424],{},[106,425,426,429,432],{},[109,427,428],{},"项",[109,430,431],{},"v4 官方值",[109,433,434],{},"换算\u002F决策",[125,436,437,455,469,482,494,515,535,548],{},[106,438,439,442,447],{},[130,440,441],{},"容器底色",[130,443,444],{},[78,445,446],{},"bg-card text-card-foreground",[130,448,449,450,452,453],{},"新 token ",[78,451,134],{}," \u002F ",[78,454,157],{},[106,456,457,460,466],{},[130,458,459],{},"容器描边",[130,461,462,465],{},[78,463,464],{},"ring-1 ring-foreground\u002F5","（light）\u002F10（dark）",[130,467,468],{},"1px，前景色 5%\u002F10% 透明",[106,470,471,474,479],{},[130,472,473],{},"阴影",[130,475,476],{},[78,477,478],{},"shadow-md",[130,480,481],{},"轻阴影",[106,483,484,487,489],{},[130,485,486],{},"圆角",[130,488,309],{},[130,490,491],{},[278,492,493],{},"8px（theme.radius）",[106,495,496,499,509],{},[130,497,498],{},"内边距",[130,500,501,504,505,508],{},[78,502,503],{},"--card-spacing: spacing(6)"," = 24px；",[78,506,507],{},"size=\"sm\""," 时 spacing(4) = 16px",[130,510,511,512],{},"支持 ",[78,513,514],{},"size: default\u002Fsm",[106,516,517,520,533],{},[130,518,519],{},"文本",[130,521,522,525,526,529,530,532],{},[78,523,524],{},"text-sm","(14px)；Title ",[78,527,528],{},"text-base","(16px) font-medium；Description ",[78,531,524],{}," mutedForeground",[130,534],{},[106,536,537,540,545],{},[130,538,539],{},"Header\u002FContent\u002FFooter 横向 padding",[130,541,542],{},[78,543,544],{},"px-(--card-spacing)",[130,546,547],{},"24px（sm 16px）",[106,549,550,553,558],{},[130,551,552],{},"Footer",[130,554,555],{},[78,556,557],{},"flex items-center",[130,559,560],{},"子项水平排列、垂直居中",[92,562,564],{"id":563},"qml-实现要点","QML 实现要点",[239,566,567,590,613,632,643],{},[242,568,569,570,573,574,81,577,81,580,81,583,81,586,589],{},"纯组合：",[78,571,572],{},"ShadcnCard"," 容器 + ",[78,575,576],{},"ShadcnCardHeader",[78,578,579],{},"ShadcnCardTitle",[78,581,582],{},"ShadcnCardDescription",[78,584,585],{},"ShadcnCardContent",[78,587,588],{},"ShadcnCardFooter"," 六个 QML 类型",[242,591,592,593,81,596,81,599,81,602,81,605,608,609,612],{},"容器：",[78,594,595],{},"Rectangle",[78,597,598],{},"radius: theme.radius",[78,600,601],{},"color: theme.card",[78,603,604],{},"border.width: 1",[78,606,607],{},"border.color: Qt.rgba(theme.foreground, 0.05)"," + 阴影（",[78,610,611],{},"layer"," 或简单矩形叠层）",[242,614,615,616,619,620,623,624,627,628,631],{},"子组件用 ",[78,617,618],{},"Item"," 派生、",[78,621,622],{},"default property"," 接子项、",[78,625,626],{},"leftPadding\u002FrightPadding\u002FtopPadding\u002FbottomPadding"," 由外部 ",[78,629,630],{},"padding"," 属性控制（对齐 shadcn：Header\u002FContent\u002FFooter 各自带 padding，Card 管 gap）",[242,633,634,635,638,639,642],{},"内容流：Header\u002FContent\u002FFooter 垂直堆叠（",[78,636,637],{},"Column","），间距 ",[78,640,641],{},"gap-1.5","(6px) 等对齐",[242,644,645,646,649],{},"提供 ",[78,647,648],{},"size: \"default\" | \"sm\""," 属性（sm 内边距 16px）",[396,651],{},[87,653,655],{"id":654},"_2-shadcninput基于-qqctextfield","2. ShadcnInput（基于 QQC.TextField）",[92,657,419],{"id":658},"shadcn-规范值-1",[100,660,661,671],{},[103,662,663],{},[106,664,665,667,669],{},[109,666,428],{},[109,668,431],{},[109,670,434],{},[125,672,673,686,696,712,726,739,751,768,781,794],{},[106,674,675,678,683],{},[130,676,677],{},"高度",[130,679,680],{},[78,681,682],{},"h-9",[130,684,685],{},"36px",[106,687,688,690,692],{},[130,689,486],{},[130,691,326],{},[130,693,694],{},[278,695,329],{},[106,697,698,701,706],{},[130,699,700],{},"底色",[130,702,703],{},[78,704,705],{},"bg-input\u002F50",[130,707,708,711],{},[78,709,710],{},"theme.input"," 50% 透明",[106,713,714,717,723],{},[130,715,716],{},"边框",[130,718,719,722],{},[78,720,721],{},"border-transparent","（常态）",[130,724,725],{},"1px 透明，聚焦切 ring",[106,727,728,731,736],{},[130,729,730],{},"聚焦态",[130,732,733],{},[78,734,735],{},"focus-visible:border-ring focus-visible:ring-3 ring-ring\u002F30",[130,737,738],{},"border=ring + 3px 外环 30% 透明",[106,740,741,743,748],{},[130,742,498],{},[130,744,745],{},[78,746,747],{},"px-3 py-1",[130,749,750],{},"左右 12px \u002F 上下 4px",[106,752,753,756,765],{},[130,754,755],{},"字号",[130,757,758,760,761,764],{},[78,759,528],{},"(16) \u002F ",[78,762,763],{},"md:text-sm","(14)",[130,766,767],{},"用 14px（桌面）",[106,769,770,773,778],{},[130,771,772],{},"placeholder",[130,774,775],{},[78,776,777],{},"text-muted-foreground",[130,779,780],{},"mutedForeground",[106,782,783,786,791],{},[130,784,785],{},"disabled",[130,787,788],{},[78,789,790],{},"opacity-50",[130,792,793],{},"50% 透明（与 Button 一致）",[106,795,796,799,804],{},[130,797,798],{},"file 按钮",[130,800,801],{},[78,802,803],{},"file:text-foreground",[130,805,806],{},"不支持（桌面无需）",[92,808,564],{"id":809},"qml-实现要点-1",[239,811,812,828,849,854,865],{},[242,813,814,817,818,821,822,81,825],{},[78,815,816],{},"import QtQuick.Controls.Basic","，基于 ",[78,819,820],{},"TextField","，重写 ",[78,823,824],{},"background",[78,826,827],{},"placeholderTextColor",[242,829,830,831,281,833,836,837,840,841,844,845,848],{},"背景 ",[78,832,595],{},[78,834,835],{},"radius: 6","，常态 ",[78,838,839],{},"color: Qt.rgba(theme.input, 0.5)"," + 1px 透明边框；",[78,842,843],{},"activeFocus"," 时 ",[78,846,847],{},"border.color: theme.ring"," + 外扩 ring 环（3px、30% 透明，同 Button 焦点环做法）",[242,850,851],{},[78,852,853],{},"placeholderTextColor: theme.mutedForeground",[242,855,856,857,860,861,864],{},"禁用态 ",[78,858,859],{},"opacity: 0.5","（",[78,862,863],{},"!enabled","）",[242,866,867,870],{},[78,868,869],{},"implicitWidth: 200","（shadcn 无默认宽，w-full 由外部决定）",[396,872],{},[87,874,876],{"id":875},"_3-shadcnbadge","3. ShadcnBadge",[92,878,419],{"id":879},"shadcn-规范值-2",[100,881,882,892],{},[103,883,884],{},[106,885,886,888,890],{},[109,887,428],{},[109,889,431],{},[109,891,434],{},[125,893,894,906,917,929,946],{},[106,895,896,898,903],{},[130,897,677],{},[130,899,900],{},[78,901,902],{},"h-5",[130,904,905],{},"20px",[106,907,908,910,912],{},[130,909,486],{},[130,911,326],{},[130,913,914],{},[278,915,916],{},"胶囊（radius: 20）",[106,918,919,921,926],{},[130,920,498],{},[130,922,923],{},[78,924,925],{},"px-2 py-0.5",[130,927,928],{},"左右 8px \u002F 上下 2px",[106,930,931,934,943],{},[130,932,933],{},"字号\u002F字重",[130,935,936,939,940],{},[78,937,938],{},"text-xs","(12px) ",[78,941,942],{},"font-medium",[130,944,945],{},"12px \u002F Font.Medium",[106,947,948,951,956],{},[130,949,950],{},"描边",[130,952,953],{},[78,954,955],{},"border border-transparent",[130,957,958],{},"1px 透明（outline variant 换 border token）",[92,960,962],{"id":961},"variantsv4-官方6-种","variants（v4 官方，6 种）",[100,964,965,984],{},[103,966,967],{},[106,968,969,972,974,977],{},[109,970,971],{},"variant",[109,973,700],{},[109,975,976],{},"文字",[109,978,979,980,983],{},"hover（包裹 ",[78,981,982],{},"\u003Ca>"," 时）",[125,985,986,1004,1021,1041,1057,1071],{},[106,987,988,991,996,1001],{},[130,989,990],{},"default",[130,992,993],{},[78,994,995],{},"primary",[130,997,998],{},[78,999,1000],{},"primaryForeground",[130,1002,1003],{},"bg-primary\u002F80",[106,1005,1006,1009,1013,1018],{},[130,1007,1008],{},"secondary",[130,1010,1011],{},[78,1012,1008],{},[130,1014,1015],{},[78,1016,1017],{},"secondaryForeground",[130,1019,1020],{},"bg-secondary\u002F80",[106,1022,1023,1026,1034,1038],{},[130,1024,1025],{},"destructive",[130,1027,1028,860,1031,864],{},[78,1029,1030],{},"bg-destructive\u002F10",[278,1032,1033],{},"透明底红字",[130,1035,1036],{},[78,1037,1025],{},[130,1039,1040],{},"bg-destructive\u002F20",[106,1042,1043,1046,1049,1054],{},[130,1044,1045],{},"outline",[130,1047,1048],{},"透明",[130,1050,1051],{},[78,1052,1053],{},"foreground",[130,1055,1056],{},"bg-muted + mutedForeground",[106,1058,1059,1062,1064,1068],{},[130,1060,1061],{},"ghost",[130,1063,1048],{},[130,1065,1066],{},[78,1067,1053],{},[130,1069,1070],{},"bg-muted",[106,1072,1073,1076,1078,1082],{},[130,1074,1075],{},"link",[130,1077,1048],{},[130,1079,1080],{},[78,1081,995],{},[130,1083,1084],{},"下划线（underline-offset-4）",[71,1086,1087],{},[74,1088,1089],{},"注意 v4 变化：destructive 是「透明底 + 红字」（旧版是实心红底白字），按 v4 实现。",[92,1091,564],{"id":1092},"qml-实现要点-2",[239,1094,1095,1108,1119,1131],{},[242,1096,1097,1098,1100,1101,1103,1104,1107],{},"无 QQC 基类：",[78,1099,618],{},"\u002F",[78,1102,595],{}," 容器 + 内部 ",[78,1105,1106],{},"Text","（对齐 Button 的居中做法）",[242,1109,1110,1111,1118],{},"variant → token 查表：",[278,1112,1113,1114,1117],{},"新增 ",[78,1115,1116],{},"VariantTokens.badge"," 表","（bg\u002Ffg 字符串，沿用现有机制）；destructive 需特殊处理（底色 = destructive 10% 透明，非实心）",[242,1120,511,1121,1123,1124,1127,1128],{},[78,1122,412],{}," 属性；",[78,1125,1126],{},"implicitWidth: text + 16","，",[78,1129,1130],{},"implicitHeight: 20",[242,1132,1133,1134,1137],{},"复用 ",[78,1135,1136],{},"theme.tokens[]"," 查询保持 mode 切换绑定",[396,1139],{},[87,1141,1143],{"id":1142},"_4-shadcnswitch基于-qqcswitch","4. ShadcnSwitch（基于 QQC.Switch）",[92,1145,1147],{"id":1146},"shadcn-规范值size-default-sm","shadcn 规范值（size: default \u002F sm）",[100,1149,1150,1161],{},[103,1151,1152],{},[106,1153,1154,1156,1158],{},[109,1155,428],{},[109,1157,990],{},[109,1159,1160],{},"sm",[125,1162,1163,1174,1185,1199,1208,1221,1233],{},[106,1164,1165,1168,1171],{},[130,1166,1167],{},"轨道",[130,1169,1170],{},"44×20px（w-11 h-5）",[130,1172,1173],{},"28×16px（w-7 h-4）",[106,1175,1176,1179,1182],{},[130,1177,1178],{},"滑块",[130,1180,1181],{},"24×16px（w-6 h-4）",[130,1183,1184],{},"16×12px（w-4 h-3）",[106,1186,1187,1190,1196],{},[130,1188,1189],{},"checked 滑块位移",[130,1191,1192,1195],{},[78,1193,1194],{},"translate-x-[calc(100%-8px)]"," = 16px",[130,1197,1198],{},"8px",[106,1200,1201,1204,1206],{},[130,1202,1203],{},"轨道圆角",[130,1205,356],{},[130,1207,356],{},[106,1209,1210,1213,1218],{},[130,1211,1212],{},"轨道 checked",[130,1214,1215],{},[78,1216,1217],{},"bg-primary border-primary",[130,1219,1220],{},"同左",[106,1222,1223,1226,1231],{},[130,1224,1225],{},"轨道 unchecked",[130,1227,1228],{},[78,1229,1230],{},"bg-input\u002F90 border-transparent",[130,1232,1220],{},[106,1234,1235,1238,1243],{},[130,1236,1237],{},"滑块色",[130,1239,1240],{},[78,1241,1242],{},"bg-background shadow-sm",[130,1244,1245],{},"同左（dark checked 用 primaryForeground）",[92,1247,564],{"id":1248},"qml-实现要点-3",[239,1250,1251,1267,1295,1322,1328],{},[242,1252,1253,1254,1257,1258,81,1260,1263,1264,864],{},"基于 ",[78,1255,1256],{},"QQC.Switch","（Basic style），重写 ",[78,1259,824],{},[78,1261,1262],{},"indicator","（或 ",[78,1265,1266],{},"contentItem",[242,1268,1269,1270,1272,1273,1276,1277,1280,1281,1284,1285,1287,1288,1280,1291,1294],{},"轨道：",[78,1271,595],{}," 宽高随 size（44×20 \u002F 28×16），",[78,1274,1275],{},"radius: height\u002F2","；",[78,1278,1279],{},"checked"," → ",[78,1282,1283],{},"theme.primary"," + 1px ",[78,1286,995],{}," 边框；",[78,1289,1290],{},"!checked",[78,1292,1293],{},"Qt.rgba(theme.input, 0.9)"," + 透明边框",[242,1296,1297,1298,1300,1301,1127,1303,1276,1306,1309,1310,1313,1314,1317,1318,1321],{},"滑块：",[78,1299,595],{},"（24×16 \u002F 16×12），",[78,1302,1275],{},[78,1304,1305],{},"color: theme.background",[78,1307,1308],{},"x"," 绑定：",[78,1311,1312],{},"checked ? width - thumb.width - 2*border : 2","（用 ",[78,1315,1316],{},"Behavior on x"," 或 ",[78,1319,1320],{},"NumberAnimation"," 150ms 过渡）",[242,1323,1324,1325,1327],{},"聚焦环：",[78,1326,843],{}," 时 3px ring 外环（同 Input）",[242,1329,1330,1331],{},"disabled：",[78,1332,859],{},[396,1334],{},[87,1336,1338],{"id":1337},"_5-shadcntabs基于-qqctabbar-tabbutton-stacklayout","5. ShadcnTabs（基于 QQC.TabBar \u002F TabButton \u002F StackLayout）",[92,1340,1341],{"id":1341},"结构",[407,1343,1346],{"className":1344,"code":1345,"language":412},[410],"ShadcnTabs（容器）\n├── ShadcnTabsList（TabBar 视觉：胶囊底 or line）\n│   ├── ShadcnTabsTrigger（TabButton，选中态 + 指示器）\n│   └── ...\n└── ShadcnTabsContent（StackLayout 页区）\n",[78,1347,1345],{"__ignoreMap":415},[92,1349,419],{"id":1350},"shadcn-规范值-3",[100,1352,1353,1365],{},[103,1354,1355],{},[106,1356,1357,1359,1362],{},[109,1358,428],{},[109,1360,1361],{},"v4 官方值（default variant）",[109,1363,1364],{},"决策",[125,1366,1367,1382,1395,1408,1422,1435,1448,1463],{},[106,1368,1369,1372,1377],{},[130,1370,1371],{},"TabsList 底色",[130,1373,1374],{},[78,1375,1376],{},"bg-muted rounded-full p-1 h-9",[130,1378,1379],{},[278,1380,1381],{},"bg-muted + theme.radius(8) + p-4 + 高 36",[106,1383,1384,1387,1392],{},[130,1385,1386],{},"TabsList line variant",[130,1388,1389],{},[78,1390,1391],{},"gap-1 bg-transparent",[130,1393,1394],{},"下划线式（v4 新增）",[106,1396,1397,1400,1405],{},[130,1398,1399],{},"Trigger",[130,1401,1402],{},[78,1403,1404],{},"rounded-full px-3 py-1 text-sm font-medium",[130,1406,1407],{},"6px 圆角、12px padding、14px\u002FMedium",[106,1409,1410,1413,1419],{},[130,1411,1412],{},"Trigger 常态",[130,1414,1415,1418],{},[78,1416,1417],{},"text-foreground\u002F60","（dark: mutedForeground）",[130,1420,1421],{},"foreground 60% 透明",[106,1423,1424,1427,1432],{},[130,1425,1426],{},"Trigger hover",[130,1428,1429],{},[78,1430,1431],{},"text-foreground",[130,1433,1434],{},"全不透明",[106,1436,1437,1440,1445],{},[130,1438,1439],{},"Trigger 选中（default）",[130,1441,1442],{},[78,1443,1444],{},"bg-background text-foreground",[130,1446,1447],{},"白底 + 前景色",[106,1449,1450,1453,1460],{},[130,1451,1452],{},"Trigger 选中（line）",[130,1454,1455,1456,1459],{},"下划线 ",[78,1457,1458],{},"after:h-0.5 after:bg-foreground","（bottom -5px）",[130,1461,1462],{},"2px 下划线指示器",[106,1464,1465,1468,1473],{},[130,1466,1467],{},"TabsContent",[130,1469,1470],{},[78,1471,1472],{},"text-sm flex-1",[130,1474,1475],{},"14px",[92,1477,564],{"id":1478},"qml-实现要点-4",[239,1480,1481,1497,1512,1529,1543],{},[242,1482,1483,1486,1487,1100,1490,1100,1493,1496],{},[78,1484,1485],{},"ShadcnTabs","：暴露 ",[78,1488,1489],{},"currentIndex",[78,1491,1492],{},"currentItem",[78,1494,1495],{},"currentTitle","，管 Trigger 与 Content 的联动",[242,1498,1499,281,1502,1505,1506,1276,1508,1511],{},[78,1500,1501],{},"ShadcnTabsList",[78,1503,1504],{},"TabBar","（Basic），重写 ",[78,1507,824],{},[78,1509,1510],{},"position"," 对齐 shadcn（列表在上）",[242,1513,1514,281,1517,821,1520,1522,1523,1525,1526,1528],{},[78,1515,1516],{},"ShadcnTabsTrigger",[78,1518,1519],{},"TabButton",[78,1521,824],{},"（选中 bg-background \u002F 常态透明）+ 内容 Text（60%→100% 透明切换）+ line variant 下划线指示器（",[78,1524,595],{}," 2px，",[78,1527,1308],{}," 动画可选）",[242,1530,1531,281,1534,1263,1537,1539,1540,1542],{},[78,1532,1533],{},"ShadcnTabsContent",[78,1535,1536],{},"StackLayout",[78,1538,1504],{}," + 关联 StackLayout），",[78,1541,1489],{}," 绑定",[242,1544,645,1545,1548,1549,1552],{},[78,1546,1547],{},"variant: default\u002Fline","、",[78,1550,1551],{},"orientation","（横向为主，vertical 后期）",[396,1554],{},[87,1556,1558],{"id":1557},"_6-shadcndialog基于-qqcdialog","6. ShadcnDialog（基于 QQC.Dialog）",[92,1560,1341],{"id":1561},"结构-1",[407,1563,1566],{"className":1564,"code":1565,"language":412},[410],"ShadcnDialog（Popup 封装）\n├── ShadcnDialogOverlay  （bg-black\u002F30 + backdrop-blur）\n├── ShadcnDialogContent  （popover 底 + 圆角 + 阴影 + 居中）\n│   ├── ShadcnDialogHeader（Title + Description）\n│   │   ├── ShadcnDialogTitle\n│   │   └── ShadcnDialogDescription\n│   ├── （业务内容）\n│   └── ShadcnDialogFooter（按钮区，右对齐）\n└── ShadcnDialogClose  （右上角 X，ghost 图标按钮）\n",[78,1567,1565],{"__ignoreMap":415},[92,1569,419],{"id":1570},"shadcn-规范值-4",[100,1572,1573,1583],{},[103,1574,1575],{},[106,1576,1577,1579,1581],{},[109,1578,428],{},[109,1580,431],{},[109,1582,434],{},[125,1584,1585,1598,1613,1633,1644,1662,1674,1687,1700,1712,1726],{},[106,1586,1587,1590,1595],{},[130,1588,1589],{},"遮罩",[130,1591,1592],{},[78,1593,1594],{},"bg-black\u002F30 backdrop-blur-sm",[130,1596,1597],{},"黑 30% + 背景模糊",[106,1599,1600,1602,1607],{},[130,1601,441],{},[130,1603,1604],{},[78,1605,1606],{},"bg-popover text-popover-foreground",[130,1608,449,1609,1100,1611],{},[78,1610,202],{},[78,1612,223],{},[106,1614,1615,1618,1630],{},[130,1616,1617],{},"容器宽",[130,1619,1620,1623,1624,1127,1627],{},[78,1621,1622],{},"max-w-md"," = ",[278,1625,1626],{},"448px",[78,1628,1629],{},"max-w-[calc(100%-2rem)]",[130,1631,1632],{},"448px，小屏留 32px 边距",[106,1634,1635,1638,1640],{},[130,1636,1637],{},"容器圆角",[130,1639,309],{},[130,1641,1642],{},[278,1643,493],{},[106,1645,1646,1649,1659],{},[130,1647,1648],{},"容器内边距",[130,1650,1651,1654,1655,1658],{},[78,1652,1653],{},"p-6","（24px），",[78,1656,1657],{},"gap-6","（24px）",[130,1660,1661],{},"24px",[106,1663,1664,1666,1671],{},[130,1665,473],{},[130,1667,1668],{},[78,1669,1670],{},"shadow-xl ring-1 ring-foreground\u002F5",[130,1672,1673],{},"重阴影 + 1px 前景 5% 环",[106,1675,1676,1679,1684],{},[130,1677,1678],{},"标题",[130,1680,1681],{},[78,1682,1683],{},"text-base font-medium leading-none",[130,1685,1686],{},"16px \u002F Medium",[106,1688,1689,1692,1697],{},[130,1690,1691],{},"描述",[130,1693,1694],{},[78,1695,1696],{},"text-sm text-muted-foreground",[130,1698,1699],{},"14px \u002F mutedForeground",[106,1701,1702,1704,1709],{},[130,1703,552],{},[130,1705,1706],{},[78,1707,1708],{},"flex justify-end gap-2",[130,1710,1711],{},"右对齐",[106,1713,1714,1717,1723],{},[130,1715,1716],{},"关闭按钮",[130,1718,1719,1720],{},"右上角 ghost 图标按钮（X），",[78,1721,1722],{},"absolute top-4 right-4",[130,1724,1725],{},"ShadcnButton.Ghost + Icon（M4 前用文本 ✕）",[106,1727,1728,1731,1734],{},[130,1729,1730],{},"动画",[130,1732,1733],{},"fade-in + zoom-in-95，duration 100ms",[130,1735,1736,81,1739,1742],{},[78,1737,1738],{},"opacity",[78,1740,1741],{},"scale"," 动画",[92,1744,564],{"id":1745},"qml-实现要点-5",[239,1747,1748,1762,1769,1775,1785],{},[242,1749,1253,1750,1753,1754,1757,1758,1761],{},[78,1751,1752],{},"QQC.Dialog","（Basic），",[78,1755,1756],{},"modal: true","；重写 ",[78,1759,1760],{},"overlay","（黑 30% + blur）",[242,1763,1764,1765,1768],{},"内容：",[78,1766,1767],{},"ShadcnDialogContent"," 容器（popover 底 + 8px 圆角 + 1px 环 + 阴影 + 448px 宽），居中于 overlay",[242,1770,1771,1774],{},[78,1772,1773],{},"standardButtons: Dialog.NoButton","，关闭由右上角 X \u002F Esc（QQC 自带）触发",[242,1776,1777,1778,1781,1782,864],{},"Header\u002FFooter 组合组件对齐 Card 风格；",[78,1779,1780],{},"closeButtonVisible"," 属性控制 X 显示（shadcn ",[78,1783,1784],{},"showCloseButton",[242,1786,1787],{},"动画：进入时 opacity 0→1 + scale 0.95→1（100ms），退出反向",[396,1789],{},[87,1791,1793],{"id":1792},"_7-各组件-api-草案与-shadcn-对齐","7. 各组件 API 草案（与 shadcn 对齐）",[407,1795,1799],{"className":1796,"code":1797,"language":1798,"meta":415,"style":415},"language-qml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Card\nShadcnCard { size: \"default\" }  \u002F\u002F default | sm\n    ShadcnCardHeader {\n        ShadcnCardTitle { text: \"标题\" }\n        ShadcnCardDescription { text: \"描述\" }\n    }\n    ShadcnCardContent { \u002F* 业务内容 *\u002F }\n    ShadcnCardFooter {\n        ShadcnButton { text: \"确定\" }\n    }\n\n\u002F\u002F Input\nShadcnInput {\n    placeholderText: \"请输入\"\n    onAccepted: ...\n}\n\n\u002F\u002F Badge\nShadcnBadge { text: \"New\"; variant: ShadcnBadge.Variant.Default }\n\u002F\u002F Default \u002F Secondary \u002F Destructive \u002F Outline \u002F Ghost \u002F Link\n\n\u002F\u002F Switch\nShadcnSwitch { checked: true; size: ShadcnSwitch.Size.Default }  \u002F\u002F Default | Small\n\n\u002F\u002F Tabs\nShadcnTabs {\n    currentIndex: 0\n    ShadcnTabsList {   \u002F\u002F variant: \"default\" | \"line\"\n        ShadcnTabsTrigger { text: \"账户\" }\n        ShadcnTabsTrigger { text: \"密码\" }\n    }\n    ShadcnTabsContent { \u002F* 页 1 *\u002F }\n    ShadcnTabsContent { \u002F* 页 2 *\u002F }\n}\n\n\u002F\u002F Dialog\nShadcnDialog {\n    id: dialog\n    title: \"确认删除\"\n    ShadcnDialogContent {\n        ShadcnDialogHeader {\n            ShadcnDialogTitle { text: dialog.title }\n            ShadcnDialogDescription { text: \"此操作不可撤销。\" }\n        }\n        ShadcnDialogFooter {\n            ShadcnButton { text: \"取消\"; onClicked: dialog.close() }\n            ShadcnButton { text: \"删除\"; variant: ShadcnButton.Variant.Destructive; onClicked: dialog.close() }\n        }\n    }\n}\n","qml",[78,1800,1801,1809,1815,1821,1827,1833,1839,1845,1851,1857,1862,1869,1875,1881,1887,1893,1899,1904,1910,1916,1922,1927,1933,1939,1944,1950,1956,1962,1968,1974,1980,1985,1991,1997,2002,2007,2013,2019,2025,2031,2037,2043,2049,2055,2061,2067,2073,2079,2084,2089],{"__ignoreMap":415},[1802,1803,1806],"span",{"class":1804,"line":1805},"line",1,[1802,1807,1808],{},"\u002F\u002F Card\n",[1802,1810,1812],{"class":1804,"line":1811},2,[1802,1813,1814],{},"ShadcnCard { size: \"default\" }  \u002F\u002F default | sm\n",[1802,1816,1818],{"class":1804,"line":1817},3,[1802,1819,1820],{},"    ShadcnCardHeader {\n",[1802,1822,1824],{"class":1804,"line":1823},4,[1802,1825,1826],{},"        ShadcnCardTitle { text: \"标题\" }\n",[1802,1828,1830],{"class":1804,"line":1829},5,[1802,1831,1832],{},"        ShadcnCardDescription { text: \"描述\" }\n",[1802,1834,1836],{"class":1804,"line":1835},6,[1802,1837,1838],{},"    }\n",[1802,1840,1842],{"class":1804,"line":1841},7,[1802,1843,1844],{},"    ShadcnCardContent { \u002F* 业务内容 *\u002F }\n",[1802,1846,1848],{"class":1804,"line":1847},8,[1802,1849,1850],{},"    ShadcnCardFooter {\n",[1802,1852,1854],{"class":1804,"line":1853},9,[1802,1855,1856],{},"        ShadcnButton { text: \"确定\" }\n",[1802,1858,1860],{"class":1804,"line":1859},10,[1802,1861,1838],{},[1802,1863,1865],{"class":1804,"line":1864},11,[1802,1866,1868],{"emptyLinePlaceholder":1867},true,"\n",[1802,1870,1872],{"class":1804,"line":1871},12,[1802,1873,1874],{},"\u002F\u002F Input\n",[1802,1876,1878],{"class":1804,"line":1877},13,[1802,1879,1880],{},"ShadcnInput {\n",[1802,1882,1884],{"class":1804,"line":1883},14,[1802,1885,1886],{},"    placeholderText: \"请输入\"\n",[1802,1888,1890],{"class":1804,"line":1889},15,[1802,1891,1892],{},"    onAccepted: ...\n",[1802,1894,1896],{"class":1804,"line":1895},16,[1802,1897,1898],{},"}\n",[1802,1900,1902],{"class":1804,"line":1901},17,[1802,1903,1868],{"emptyLinePlaceholder":1867},[1802,1905,1907],{"class":1804,"line":1906},18,[1802,1908,1909],{},"\u002F\u002F Badge\n",[1802,1911,1913],{"class":1804,"line":1912},19,[1802,1914,1915],{},"ShadcnBadge { text: \"New\"; variant: ShadcnBadge.Variant.Default }\n",[1802,1917,1919],{"class":1804,"line":1918},20,[1802,1920,1921],{},"\u002F\u002F Default \u002F Secondary \u002F Destructive \u002F Outline \u002F Ghost \u002F Link\n",[1802,1923,1925],{"class":1804,"line":1924},21,[1802,1926,1868],{"emptyLinePlaceholder":1867},[1802,1928,1930],{"class":1804,"line":1929},22,[1802,1931,1932],{},"\u002F\u002F Switch\n",[1802,1934,1936],{"class":1804,"line":1935},23,[1802,1937,1938],{},"ShadcnSwitch { checked: true; size: ShadcnSwitch.Size.Default }  \u002F\u002F Default | Small\n",[1802,1940,1942],{"class":1804,"line":1941},24,[1802,1943,1868],{"emptyLinePlaceholder":1867},[1802,1945,1947],{"class":1804,"line":1946},25,[1802,1948,1949],{},"\u002F\u002F Tabs\n",[1802,1951,1953],{"class":1804,"line":1952},26,[1802,1954,1955],{},"ShadcnTabs {\n",[1802,1957,1959],{"class":1804,"line":1958},27,[1802,1960,1961],{},"    currentIndex: 0\n",[1802,1963,1965],{"class":1804,"line":1964},28,[1802,1966,1967],{},"    ShadcnTabsList {   \u002F\u002F variant: \"default\" | \"line\"\n",[1802,1969,1971],{"class":1804,"line":1970},29,[1802,1972,1973],{},"        ShadcnTabsTrigger { text: \"账户\" }\n",[1802,1975,1977],{"class":1804,"line":1976},30,[1802,1978,1979],{},"        ShadcnTabsTrigger { text: \"密码\" }\n",[1802,1981,1983],{"class":1804,"line":1982},31,[1802,1984,1838],{},[1802,1986,1988],{"class":1804,"line":1987},32,[1802,1989,1990],{},"    ShadcnTabsContent { \u002F* 页 1 *\u002F }\n",[1802,1992,1994],{"class":1804,"line":1993},33,[1802,1995,1996],{},"    ShadcnTabsContent { \u002F* 页 2 *\u002F }\n",[1802,1998,2000],{"class":1804,"line":1999},34,[1802,2001,1898],{},[1802,2003,2005],{"class":1804,"line":2004},35,[1802,2006,1868],{"emptyLinePlaceholder":1867},[1802,2008,2010],{"class":1804,"line":2009},36,[1802,2011,2012],{},"\u002F\u002F Dialog\n",[1802,2014,2016],{"class":1804,"line":2015},37,[1802,2017,2018],{},"ShadcnDialog {\n",[1802,2020,2022],{"class":1804,"line":2021},38,[1802,2023,2024],{},"    id: dialog\n",[1802,2026,2028],{"class":1804,"line":2027},39,[1802,2029,2030],{},"    title: \"确认删除\"\n",[1802,2032,2034],{"class":1804,"line":2033},40,[1802,2035,2036],{},"    ShadcnDialogContent {\n",[1802,2038,2040],{"class":1804,"line":2039},41,[1802,2041,2042],{},"        ShadcnDialogHeader {\n",[1802,2044,2046],{"class":1804,"line":2045},42,[1802,2047,2048],{},"            ShadcnDialogTitle { text: dialog.title }\n",[1802,2050,2052],{"class":1804,"line":2051},43,[1802,2053,2054],{},"            ShadcnDialogDescription { text: \"此操作不可撤销。\" }\n",[1802,2056,2058],{"class":1804,"line":2057},44,[1802,2059,2060],{},"        }\n",[1802,2062,2064],{"class":1804,"line":2063},45,[1802,2065,2066],{},"        ShadcnDialogFooter {\n",[1802,2068,2070],{"class":1804,"line":2069},46,[1802,2071,2072],{},"            ShadcnButton { text: \"取消\"; onClicked: dialog.close() }\n",[1802,2074,2076],{"class":1804,"line":2075},47,[1802,2077,2078],{},"            ShadcnButton { text: \"删除\"; variant: ShadcnButton.Variant.Destructive; onClicked: dialog.close() }\n",[1802,2080,2082],{"class":1804,"line":2081},48,[1802,2083,2060],{},[1802,2085,2087],{"class":1804,"line":2086},49,[1802,2088,1838],{},[1802,2090,2092],{"class":1804,"line":2091},50,[1802,2093,1898],{},[87,2095,2097],{"id":2096},"_8-实现顺序与验证","8. 实现顺序与验证",[2099,2100,2101,2104,2107,2110],"ol",{},[242,2102,2103],{},"ThemeManager 加 5 个新 token + QtShadcnTheme 暴露属性（先行，供后续组件使用）",[242,2105,2106],{},"Card → Input → Badge → Switch → Tabs → Dialog（每个：实现 → QML_FILES 注册 → showcase 新页 → 全状态展示）",[242,2108,2109],{},"showcase「组合示例」：新建项目对话框（Dialog + Card + Input + Button + Tabs 组合），验证 M3 集成",[242,2111,2112,2115],{},[78,2113,2114],{},"make build"," + 运行截图确认 + commit + 关闭 GitHub issues",[2117,2118,2119],"style",{},"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);}",{"title":415,"searchDepth":1811,"depth":1811,"links":2121},[2122,2126,2131,2135,2140,2144,2149,2154,2155],{"id":89,"depth":1811,"text":90,"children":2123},[2124,2125],{"id":94,"depth":1817,"text":95},{"id":264,"depth":1817,"text":265},{"id":400,"depth":1811,"text":401,"children":2127},[2128,2129,2130],{"id":404,"depth":1817,"text":405},{"id":418,"depth":1817,"text":419},{"id":563,"depth":1817,"text":564},{"id":654,"depth":1811,"text":655,"children":2132},[2133,2134],{"id":658,"depth":1817,"text":419},{"id":809,"depth":1817,"text":564},{"id":875,"depth":1811,"text":876,"children":2136},[2137,2138,2139],{"id":879,"depth":1817,"text":419},{"id":961,"depth":1817,"text":962},{"id":1092,"depth":1817,"text":564},{"id":1142,"depth":1811,"text":1143,"children":2141},[2142,2143],{"id":1146,"depth":1817,"text":1147},{"id":1248,"depth":1817,"text":564},{"id":1337,"depth":1811,"text":1338,"children":2145},[2146,2147,2148],{"id":1341,"depth":1817,"text":1341},{"id":1350,"depth":1817,"text":419},{"id":1478,"depth":1817,"text":564},{"id":1557,"depth":1811,"text":1558,"children":2150},[2151,2152,2153],{"id":1561,"depth":1817,"text":1341},{"id":1570,"depth":1817,"text":419},{"id":1745,"depth":1817,"text":564},{"id":1792,"depth":1811,"text":1793},{"id":2096,"depth":1811,"text":2097},"M3（Card\u002FInput\u002FBadge\u002FSwitch\u002FTabs\u002FDialog）shadcn\u002Fui v4 官方规范 vs QtShadcn 实现差距对照。铁律产物：先输出对照表，确认后再写码。","md",null,{},{"icon":60},{"title":57,"description":2156},"Gui9cH8QAsny3gB9rMU-3PSylemVJAb0UJO80mUzl2U",[2164,2158],{"title":53,"path":54,"stem":55,"description":2165,"icon":48,"children":-1},"开发 QtShadcn 组件的工作流：先研究 shadcn\u002Fui 官方规范再实现（M2 教训）。",1787065113308]