Files
aurora-admin/.design_library/kole-ui-mobile/components/index.json
T
aurora-admin f1fbfc2ddb
Regression / regression (push) Canceled after 0s
feat(品牌标识): 几何 K 图标(favicon/顶栏标记/theme-color) + 并行会话成果入库
## 品牌标识(本次会话)

起因:品牌此前没有任何图形标识 —— 唯一 favicon 是内联 data-URI 里的字母「A」,
那是 v2.0.0「Aurora Admin → Kole UI」改名漏掉的一处(PC 顶栏也是「A」,
移动端站已是「K」;移动端文档站则完全没有 favicon)。

- 几何:24 网格三个互不接触的笔画(竖 + 两斜),圆头描边;
  描边 2.25 → 16px 标签页尺寸下正好 1.5px = 规范原文「描边1.5px」
- 取色分两套(刻意):favicon 硬编码品牌蓝/白(渲染在浏览器标签栏,不继承 kole-dark);
  顶栏标记走 currentColor(实测暗色下自动转 rgb(20,22,28))
- 新增 theme-color 双条(light #FFFFFF / dark #1C1F26,取 --kole-color-card-bg)
- 修 site/app.js hero 标语 KOLE ADMIN → KOLE UI(改名变形残留)
- 移动端 7 个模板补 favicon(此前计数 0)

验收:门禁 9 条全 OK(site-routing/site-routes/mobile-docs/mobile-site/isolation/
theme/nav/i18n/icons);PC 回归 1464/1464 · 移动端 807/807,各连跑 8 次一致;
两端 favicon 405 字节逐字节一致;PC 站控制台错误 1→0。

## 并行会话成果(本次一并入库)

- 图标系统:2576 图标(TDesign/Element Plus,MIT)+ 11 端注入 + 5 个构建门禁工具
  + IconPreview 预览页 + ICON-SPEC.md 冻结规格
- 移动端平台:47 组件 × 6 端 + 文档站 53 页 + 隔离门禁
- PC 组件:103 个大后台组件 / 组件11 批次
- uni-app:PC 端试点 + 移动端端实现 + 真实编译验证

## 工程

- .gitignore 补 .scratch/ 与 .zcode-preexisting-*.txt(会话中间产物,实测 9.1MB,不入库)
- CHANGELOG 补品牌标识条目
- ROADMAP 登 S8-P4(品牌标识任务包 + og:image/apple-touch-icon 未做部分)
2026-09-21 10:05:48 +08:00

1217 lines
32 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"schemaVersion": 1,
"library": "kole-ui-mobile",
"kind": "mobile",
"updatedAt": "2026-09-20",
"sourceKind": "authored-spec",
"specFile": "spec/移动端规格.md",
"description": "移动端组件索引:登记 frameworks-mobile/ 下的移动端组件。与 PC 端(.design_library/kole-ui/components/index.json,103 个)完全隔离 —— 两端索引、目录、类名、令牌前缀、测试与回归报告均不交叉,仅颜色/字体/圆角/阴影令牌同源(@import PC 令牌文件)。分类口径与 PC 端一致(见 categories 块)。",
"isolation": {
"from": "kole-ui",
"spec": "PLATFORMS.md",
"gate": "tools/verify-mobile-isolation.mjs",
"classPrefix": "kole-m-",
"tokenPrefix": "--kole-m-",
"exportPrefix": "KoleM",
"implDir": "frameworks-mobile",
"testsDir": "tests/mobile",
"siteDir": "site/m",
"report": "tests/mobile-report.json",
"rules": [
"移动端实现不得出现在 frameworks/;PC 实现不得出现在 frameworks-mobile/",
"移动端样式只引用 --kole-* 或 --kole-m-* 令牌,不得出现硬编码十六进制颜色",
"移动端类名只能是 kole-m-<name> 或状态类 is-<state>",
"PC 侧任何文件不得引用 frameworks-mobile/ 或 site/m/",
"颜色/字体/圆角/阴影令牌与 PC 同源(@import),不得在本层复制定义"
]
},
"provenanceNote": "PC 端规格来自外部交付的 组件1~10.txt;移动端没有外部规格原文,规格由本仓库撰写(specFile),故 sourceKind 为 authored-spec,契约的 provenance 必须写 authored-in-repo。",
"ends": [
"css",
"html",
"jsx",
"vue2",
"vue3",
"uniapp"
],
"components": [
{
"slug": "navbar",
"name": "顶部导航栏 NavBar",
"tier": "mobile",
"category": "navigation",
"confidence": "high",
"specSection": "1 · 顶部导航栏 NavBar",
"contract": "components/navbar.json",
"frameworksPrefix": "NavBar",
"files": {
"css": "NavBar.css",
"html": "NavBar.html",
"jsx": "NavBar.jsx",
"vue2": "NavBar.vue2.vue",
"vue3": "NavBar.vue3.vue",
"uniapp": "NavBar.uniapp.vue"
},
"variantDimensions": [
"titleAlign",
"elevated"
],
"behaviors": [
"click-toggles-class"
],
"uniappTouchEvents": true
},
{
"slug": "tabbar",
"name": "底部标签栏 TabBar",
"tier": "mobile",
"category": "navigation",
"confidence": "high",
"specSection": "2 · 底部标签栏 TabBar",
"contract": "components/tabbar.json",
"frameworksPrefix": "TabBar",
"files": {
"css": "TabBar.css",
"html": "TabBar.html",
"jsx": "TabBar.jsx",
"vue2": "TabBar.vue2.vue",
"vue3": "TabBar.vue3.vue",
"uniapp": "TabBar.uniapp.vue"
},
"variantDimensions": [
"count",
"badge"
],
"behaviors": [
"tab-switches"
],
"uniappTouchEvents": true
},
{
"slug": "actionsheet",
"name": "动作面板 ActionSheet",
"tier": "mobile",
"category": "feedback",
"confidence": "high",
"specSection": "3 · 动作面板 ActionSheet",
"contract": "components/actionsheet.json",
"frameworksPrefix": "ActionSheet",
"files": {
"css": "ActionSheet.css",
"html": "ActionSheet.html",
"jsx": "ActionSheet.jsx",
"vue2": "ActionSheet.vue2.vue",
"vue3": "ActionSheet.vue3.vue",
"uniapp": "ActionSheet.uniapp.vue"
},
"variantDimensions": [
"tone",
"cancel"
],
"behaviors": [
"click-toggles-class",
"click-sets-attr"
],
"uniappTouchEvents": true
},
{
"slug": "pullrefresh",
"name": "下拉刷新 PullRefresh",
"tier": "mobile",
"category": "feedback",
"confidence": "high",
"specSection": "4 · 下拉刷新 PullRefresh",
"contract": "components/pullrefresh.json",
"frameworksPrefix": "PullRefresh",
"files": {
"css": "PullRefresh.css",
"html": "PullRefresh.html",
"jsx": "PullRefresh.jsx",
"vue2": "PullRefresh.vue2.vue",
"vue3": "PullRefresh.vue3.vue",
"uniapp": "PullRefresh.uniapp.vue"
},
"variantDimensions": [
"state",
"threshold"
],
"behaviors": [
"pull-triggers",
"click-sets-attr"
],
"uniappTouchEvents": true
},
{
"slug": "swipecell",
"name": "滑动单元格 SwipeCell",
"tier": "mobile",
"category": "feedback",
"confidence": "high",
"specSection": "5 · 滑动单元格 SwipeCell",
"contract": "components/swipecell.json",
"frameworksPrefix": "SwipeCell",
"files": {
"css": "SwipeCell.css",
"html": "SwipeCell.html",
"jsx": "SwipeCell.jsx",
"vue2": "SwipeCell.vue2.vue",
"vue3": "SwipeCell.vue3.vue",
"uniapp": "SwipeCell.uniapp.vue"
},
"variantDimensions": [
"direction",
"actions"
],
"behaviors": [
"swipe-sets-class",
"click-sets-attr"
],
"uniappTouchEvents": true
},
{
"slug": "mobile-button",
"name": "按钮 Button",
"tier": "mobile",
"category": "general",
"confidence": "high",
"specSection": "6 · 按钮 Button",
"contract": "components/mobile-button.json",
"frameworksPrefix": "Button",
"files": {
"css": "Button.css",
"html": "Button.html",
"jsx": "Button.jsx",
"vue2": "Button.vue2.vue",
"vue3": "Button.vue3.vue",
"uniapp": "Button.uniapp.vue"
},
"variantDimensions": [
"type",
"size",
"block"
],
"behaviors": [
"click-toggles-class"
]
},
{
"slug": "cell",
"name": "单元格 Cell",
"tier": "mobile",
"category": "display",
"confidence": "high",
"specSection": "7 · 单元格 Cell",
"contract": "components/cell.json",
"frameworksPrefix": "Cell",
"files": {
"css": "Cell.css",
"html": "Cell.html",
"jsx": "Cell.jsx",
"vue2": "Cell.vue2.vue",
"vue3": "Cell.vue3.vue",
"uniapp": "Cell.uniapp.vue"
},
"variantDimensions": [
"arrow",
"link"
],
"behaviors": [
"click-sets-attr"
]
},
{
"slug": "mobile-divider",
"name": "分割线 Divider",
"tier": "mobile",
"category": "general",
"confidence": "high",
"specSection": "8 · 分割线 Divider",
"contract": "components/mobile-divider.json",
"frameworksPrefix": "Divider",
"files": {
"css": "Divider.css",
"html": "Divider.html",
"jsx": "Divider.jsx",
"vue2": "Divider.vue2.vue",
"vue3": "Divider.vue3.vue",
"uniapp": "Divider.uniapp.vue"
},
"variantDimensions": [
"orientation",
"align",
"dashed"
],
"behaviors": []
},
{
"slug": "mobile-badge",
"name": "徽标 Badge",
"tier": "mobile",
"category": "display",
"confidence": "high",
"specSection": "9 · 徽标 Badge",
"contract": "components/mobile-badge.json",
"frameworksPrefix": "Badge",
"files": {
"css": "Badge.css",
"html": "Badge.html",
"jsx": "Badge.jsx",
"vue2": "Badge.vue2.vue",
"vue3": "Badge.vue3.vue",
"uniapp": "Badge.uniapp.vue"
},
"variantDimensions": [
"shape",
"standalone"
],
"behaviors": []
},
{
"slug": "mobile-tag",
"name": "标签 Tag",
"tier": "mobile",
"category": "display",
"confidence": "high",
"specSection": "10 · 标签 Tag",
"contract": "components/mobile-tag.json",
"frameworksPrefix": "Tag",
"files": {
"css": "Tag.css",
"html": "Tag.html",
"jsx": "Tag.jsx",
"vue2": "Tag.vue2.vue",
"vue3": "Tag.vue3.vue",
"uniapp": "Tag.uniapp.vue"
},
"variantDimensions": [
"tone",
"size",
"closable"
],
"behaviors": [
"click-sets-attr"
]
},
{
"slug": "mobile-popup",
"name": "弹出层 Popup",
"tier": "mobile",
"category": "feedback",
"confidence": "high",
"specSection": "11 · 弹出层 Popup",
"contract": "components/mobile-popup.json",
"frameworksPrefix": "Popup",
"files": {
"css": "Popup.css",
"html": "Popup.html",
"jsx": "Popup.jsx",
"vue2": "Popup.vue2.vue",
"vue3": "Popup.vue3.vue",
"uniapp": "Popup.uniapp.vue"
},
"variantDimensions": [
"placement",
"round"
],
"behaviors": [
"click-toggles-class"
]
},
{
"slug": "mobile-toast",
"name": "轻提示 Toast",
"tier": "mobile",
"category": "feedback",
"confidence": "high",
"specSection": "12 · 轻提示 Toast",
"contract": "components/mobile-toast.json",
"frameworksPrefix": "Toast",
"files": {
"css": "Toast.css",
"html": "Toast.html",
"jsx": "Toast.jsx",
"vue2": "Toast.vue2.vue",
"vue3": "Toast.vue3.vue",
"uniapp": "Toast.uniapp.vue"
},
"variantDimensions": [
"tone",
"position",
"mask"
],
"behaviors": [
"click-toggles-class"
]
},
{
"slug": "mobile-dialog",
"name": "对话框 Dialog",
"tier": "mobile",
"category": "feedback",
"confidence": "high",
"specSection": "13 · 对话框 Dialog",
"contract": "components/mobile-dialog.json",
"frameworksPrefix": "Dialog",
"files": {
"css": "Dialog.css",
"html": "Dialog.html",
"jsx": "Dialog.jsx",
"vue2": "Dialog.vue2.vue",
"vue3": "Dialog.vue3.vue",
"uniapp": "Dialog.uniapp.vue"
},
"variantDimensions": [
"variant",
"tone",
"round"
],
"behaviors": [
"click-toggles-class"
]
},
{
"slug": "mobile-grid",
"name": "宫格 Grid",
"tier": "mobile",
"category": "navigation",
"confidence": "high",
"specSection": "14 · 宫格 Grid",
"contract": "components/mobile-grid.json",
"frameworksPrefix": "Grid",
"files": {
"css": "Grid.css",
"html": "Grid.html",
"jsx": "Grid.jsx",
"vue2": "Grid.vue2.vue",
"vue3": "Grid.vue3.vue",
"uniapp": "Grid.uniapp.vue"
},
"variantDimensions": [
"columns",
"border",
"square"
],
"behaviors": [
"click-sets-attr"
]
},
{
"slug": "mobile-steps",
"name": "步骤条 Steps",
"tier": "mobile",
"category": "navigation",
"confidence": "high",
"specSection": "15 · 步骤条 Steps",
"contract": "components/mobile-steps.json",
"frameworksPrefix": "Steps",
"files": {
"css": "Steps.css",
"html": "Steps.html",
"jsx": "Steps.jsx",
"vue2": "Steps.vue2.vue",
"vue3": "Steps.vue3.vue",
"uniapp": "Steps.uniapp.vue"
},
"variantDimensions": [
"direction",
"status"
],
"behaviors": []
},
{
"slug": "mobile-noticebar",
"name": "通知栏 NoticeBar",
"tier": "mobile",
"category": "feedback",
"confidence": "high",
"specSection": "16 · 通知栏 NoticeBar",
"contract": "components/mobile-noticebar.json",
"frameworksPrefix": "NoticeBar",
"files": {
"css": "NoticeBar.css",
"html": "NoticeBar.html",
"jsx": "NoticeBar.jsx",
"vue2": "NoticeBar.vue2.vue",
"vue3": "NoticeBar.vue3.vue",
"uniapp": "NoticeBar.uniapp.vue"
},
"variantDimensions": [
"tone",
"scrollable",
"closable"
],
"behaviors": [
"click-sets-attr"
]
},
{
"slug": "mobile-numberkeyboard",
"name": "数字键盘 NumberKeyboard",
"tier": "mobile",
"category": "input",
"confidence": "high",
"specSection": "17 · 数字键盘 NumberKeyboard",
"contract": "components/mobile-numberkeyboard.json",
"frameworksPrefix": "NumberKeyboard",
"files": {
"css": "NumberKeyboard.css",
"html": "NumberKeyboard.html",
"jsx": "NumberKeyboard.jsx",
"vue2": "NumberKeyboard.vue2.vue",
"vue3": "NumberKeyboard.vue3.vue",
"uniapp": "NumberKeyboard.uniapp.vue"
},
"variantDimensions": [
"type",
"showDelete",
"showConfirm"
],
"behaviors": [
"click-sets-attr"
]
},
{
"slug": "mobile-datepicker",
"name": "日期选择器 DatePicker",
"tier": "mobile",
"category": "input",
"confidence": "high",
"specSection": "18 · 日期选择器 DatePicker",
"contract": "components/mobile-datepicker.json",
"frameworksPrefix": "DatePicker",
"files": {
"css": "DatePicker.css",
"html": "DatePicker.html",
"jsx": "DatePicker.jsx",
"vue2": "DatePicker.vue2.vue",
"vue3": "DatePicker.vue3.vue",
"uniapp": "DatePicker.uniapp.vue"
},
"variantDimensions": [
"mode",
"round"
],
"behaviors": [
"click-sets-attr"
]
},
{
"slug": "mobile-icon",
"name": "图标 Icon",
"tier": "mobile",
"category": "general",
"confidence": "high",
"specSection": "19 · 图标 Icon",
"contract": "components/mobile-icon.json",
"frameworksPrefix": "Icon",
"files": {
"css": "Icon.css",
"html": "Icon.html",
"jsx": "Icon.jsx",
"vue2": "Icon.vue2.vue",
"vue3": "Icon.vue3.vue",
"uniapp": "Icon.uniapp.vue"
},
"variantDimensions": [
"size",
"tone",
"spin"
],
"behaviors": []
},
{
"slug": "mobile-layout",
"name": "布局 Layout",
"tier": "mobile",
"category": "general",
"confidence": "high",
"specSection": "20 · 布局 Layout",
"contract": "components/mobile-layout.json",
"frameworksPrefix": "Layout",
"files": {
"css": "Layout.css",
"html": "Layout.html",
"jsx": "Layout.jsx",
"vue2": "Layout.vue2.vue",
"vue3": "Layout.vue3.vue",
"uniapp": "Layout.uniapp.vue"
},
"variantDimensions": [
"gutter",
"columns",
"align",
"wrap"
],
"behaviors": []
},
{
"slug": "mobile-link",
"name": "链接 Link",
"tier": "mobile",
"category": "general",
"confidence": "high",
"specSection": "21 · 链接 Link",
"contract": "components/mobile-link.json",
"frameworksPrefix": "Link",
"files": {
"css": "Link.css",
"html": "Link.html",
"jsx": "Link.jsx",
"vue2": "Link.vue2.vue",
"vue3": "Link.vue3.vue",
"uniapp": "Link.uniapp.vue"
},
"variantDimensions": [
"tone",
"underline",
"block"
],
"behaviors": []
},
{
"slug": "mobile-loading",
"name": "加载 Loading",
"tier": "mobile",
"category": "feedback",
"confidence": "high",
"specSection": "22 · 加载 Loading",
"contract": "components/mobile-loading.json",
"frameworksPrefix": "Loading",
"files": {
"css": "Loading.css",
"html": "Loading.html",
"jsx": "Loading.jsx",
"vue2": "Loading.vue2.vue",
"vue3": "Loading.vue3.vue",
"uniapp": "Loading.uniapp.vue"
},
"variantDimensions": [
"size",
"vertical",
"fullscreen"
],
"behaviors": []
},
{
"slug": "mobile-avatar",
"name": "头像 Avatar",
"tier": "mobile",
"category": "display",
"confidence": "high",
"specSection": "23 · 头像 Avatar",
"contract": "components/mobile-avatar.json",
"frameworksPrefix": "Avatar",
"files": {
"css": "Avatar.css",
"html": "Avatar.html",
"jsx": "Avatar.jsx",
"vue2": "Avatar.vue2.vue",
"vue3": "Avatar.vue3.vue",
"uniapp": "Avatar.uniapp.vue"
},
"variantDimensions": [
"size",
"shape",
"type"
],
"behaviors": []
},
{
"slug": "mobile-list",
"name": "列表 List",
"tier": "mobile",
"category": "display",
"confidence": "high",
"specSection": "24 · 列表 List",
"contract": "components/mobile-list.json",
"frameworksPrefix": "List",
"files": {
"css": "List.css",
"html": "List.html",
"jsx": "List.jsx",
"vue2": "List.vue2.vue",
"vue3": "List.vue3.vue",
"uniapp": "List.uniapp.vue"
},
"variantDimensions": [
"border",
"size",
"divider"
],
"behaviors": []
},
{
"slug": "mobile-collapse",
"name": "折叠面板 Collapse",
"tier": "mobile",
"category": "display",
"confidence": "high",
"specSection": "25 · 折叠面板 Collapse",
"contract": "components/mobile-collapse.json",
"frameworksPrefix": "Collapse",
"files": {
"css": "Collapse.css",
"html": "Collapse.html",
"jsx": "Collapse.jsx",
"vue2": "Collapse.vue2.vue",
"vue3": "Collapse.vue3.vue",
"uniapp": "Collapse.uniapp.vue"
},
"variantDimensions": [
"accordion",
"bordered"
],
"behaviors": []
},
{
"slug": "mobile-progress",
"name": "进度条 Progress",
"tier": "mobile",
"category": "feedback",
"confidence": "high",
"specSection": "26 · 进度条 Progress",
"contract": "components/mobile-progress.json",
"frameworksPrefix": "Progress",
"files": {
"css": "Progress.css",
"html": "Progress.html",
"jsx": "Progress.jsx",
"vue2": "Progress.vue2.vue",
"vue3": "Progress.vue3.vue",
"uniapp": "Progress.uniapp.vue"
},
"variantDimensions": [
"type",
"status",
"labelPlacement"
],
"behaviors": []
},
{
"slug": "mobile-input",
"name": "输入框 Input",
"tier": "mobile",
"category": "input",
"confidence": "high",
"specSection": "27 · 输入框 Input",
"contract": "components/mobile-input.json",
"frameworksPrefix": "Input",
"files": {
"css": "Input.css",
"html": "Input.html",
"jsx": "Input.jsx",
"vue2": "Input.vue2.vue",
"vue3": "Input.vue3.vue",
"uniapp": "Input.uniapp.vue"
},
"variantDimensions": [
"size",
"clearable"
],
"behaviors": []
},
{
"slug": "mobile-search",
"name": "搜索框 Search",
"tier": "mobile",
"category": "input",
"confidence": "high",
"specSection": "28 · 搜索框 Search",
"contract": "components/mobile-search.json",
"frameworksPrefix": "Search",
"files": {
"css": "Search.css",
"html": "Search.html",
"jsx": "Search.jsx",
"vue2": "Search.vue2.vue",
"vue3": "Search.vue3.vue",
"uniapp": "Search.uniapp.vue"
},
"variantDimensions": [
"round",
"showCancel"
],
"behaviors": []
},
{
"slug": "mobile-stepper",
"name": "步进器 Stepper",
"tier": "mobile",
"category": "input",
"confidence": "high",
"specSection": "30 · 步进器 Stepper",
"contract": "components/mobile-stepper.json",
"frameworksPrefix": "Stepper",
"files": {
"css": "Stepper.css",
"html": "Stepper.html",
"jsx": "Stepper.jsx",
"vue2": "Stepper.vue2.vue",
"vue3": "Stepper.vue3.vue",
"uniapp": "Stepper.uniapp.vue"
},
"variantDimensions": [
"size",
"round"
],
"behaviors": []
},
{
"slug": "mobile-switch",
"name": "开关 Switch",
"tier": "mobile",
"category": "input",
"confidence": "high",
"specSection": "29 · 开关 Switch",
"contract": "components/mobile-switch.json",
"frameworksPrefix": "Switch",
"files": {
"css": "Switch.css",
"html": "Switch.html",
"jsx": "Switch.jsx",
"vue2": "Switch.vue2.vue",
"vue3": "Switch.vue3.vue",
"uniapp": "Switch.uniapp.vue"
},
"variantDimensions": [
"size",
"labelPlacement"
],
"behaviors": []
},
{
"slug": "mobile-textarea",
"name": "多行文本框 Textarea",
"tier": "mobile",
"category": "input",
"confidence": "high",
"specSection": "31 · 多行文本框 Textarea",
"contract": "components/mobile-textarea.json",
"frameworksPrefix": "Textarea",
"files": {
"css": "Textarea.css",
"html": "Textarea.html",
"jsx": "Textarea.jsx",
"vue2": "Textarea.vue2.vue",
"vue3": "Textarea.vue3.vue",
"uniapp": "Textarea.uniapp.vue"
},
"variantDimensions": [
"size",
"showCounter"
],
"behaviors": []
},
{
"slug": "mobile-checkbox",
"name": "多选框 Checkbox",
"tier": "mobile",
"category": "input",
"confidence": "high",
"specSection": "34 · 多选框 Checkbox",
"contract": "components/mobile-checkbox.json",
"frameworksPrefix": "Checkbox",
"files": {
"css": "Checkbox.css",
"html": "Checkbox.html",
"jsx": "Checkbox.jsx",
"vue2": "Checkbox.vue2.vue",
"vue3": "Checkbox.vue3.vue",
"uniapp": "Checkbox.uniapp.vue"
},
"variantDimensions": [
"orientation",
"button",
"selectAll"
],
"behaviors": []
},
{
"slug": "mobile-form",
"name": "表单 Form",
"tier": "mobile",
"category": "input",
"confidence": "high",
"specSection": "32 · 表单 Form",
"contract": "components/mobile-form.json",
"frameworksPrefix": "Form",
"files": {
"css": "Form.css",
"html": "Form.html",
"jsx": "Form.jsx",
"vue2": "Form.vue2.vue",
"vue3": "Form.vue3.vue",
"uniapp": "Form.uniapp.vue"
},
"variantDimensions": [
"labelPosition",
"borderless"
],
"behaviors": []
},
{
"slug": "mobile-radio",
"name": "单选框 Radio",
"tier": "mobile",
"category": "input",
"confidence": "high",
"specSection": "33 · 单选框 Radio",
"contract": "components/mobile-radio.json",
"frameworksPrefix": "Radio",
"files": {
"css": "Radio.css",
"html": "Radio.html",
"jsx": "Radio.jsx",
"vue2": "Radio.vue2.vue",
"vue3": "Radio.vue3.vue",
"uniapp": "Radio.uniapp.vue"
},
"variantDimensions": [
"orientation",
"button"
],
"behaviors": []
},
{
"slug": "mobile-rate",
"name": "评分 Rate",
"tier": "mobile",
"category": "input",
"confidence": "high",
"specSection": "36 · 评分 Rate",
"contract": "components/mobile-rate.json",
"frameworksPrefix": "Rate",
"files": {
"css": "Rate.css",
"html": "Rate.html",
"jsx": "Rate.jsx",
"vue2": "Rate.vue2.vue",
"vue3": "Rate.vue3.vue",
"uniapp": "Rate.uniapp.vue"
},
"variantDimensions": [
"size",
"allowHalf",
"readonly"
],
"behaviors": []
},
{
"slug": "mobile-slider",
"name": "滑动选择器 Slider",
"tier": "mobile",
"category": "input",
"confidence": "high",
"specSection": "35 · 滑动选择器 Slider",
"contract": "components/mobile-slider.json",
"frameworksPrefix": "Slider",
"files": {
"css": "Slider.css",
"html": "Slider.html",
"jsx": "Slider.jsx",
"vue2": "Slider.vue2.vue",
"vue3": "Slider.vue3.vue",
"uniapp": "Slider.uniapp.vue"
},
"variantDimensions": [
"mode",
"marks",
"showValue"
],
"behaviors": []
},
{
"slug": "mobile-cascader",
"name": "级联选择器 Cascader",
"tier": "mobile",
"category": "input",
"confidence": "high",
"specSection": "44 · 级联选择器 Cascader",
"contract": "components/mobile-cascader.json",
"frameworksPrefix": "Cascader",
"files": {
"css": "Cascader.css",
"html": "Cascader.html",
"jsx": "Cascader.jsx",
"vue2": "Cascader.vue2.vue",
"vue3": "Cascader.vue3.vue",
"uniapp": "Cascader.uniapp.vue"
},
"variantDimensions": [
"mode",
"showPath",
"round"
],
"behaviors": []
},
{
"slug": "mobile-colorpicker",
"name": "颜色选择器 ColorPicker",
"tier": "mobile",
"category": "input",
"confidence": "high",
"specSection": "45 · 颜色选择器 ColorPicker",
"contract": "components/mobile-colorpicker.json",
"frameworksPrefix": "ColorPicker",
"files": {
"css": "ColorPicker.css",
"html": "ColorPicker.html",
"jsx": "ColorPicker.jsx",
"vue2": "ColorPicker.vue2.vue",
"vue3": "ColorPicker.vue3.vue",
"uniapp": "ColorPicker.uniapp.vue"
},
"variantDimensions": [
"mode",
"round",
"showValue"
],
"behaviors": []
},
{
"slug": "mobile-message",
"name": "消息通知 Message",
"tier": "mobile",
"category": "feedback",
"confidence": "high",
"specSection": "42 · 消息通知 Message",
"contract": "components/mobile-message.json",
"frameworksPrefix": "Message",
"files": {
"css": "Message.css",
"html": "Message.html",
"jsx": "Message.jsx",
"vue2": "Message.vue2.vue",
"vue3": "Message.vue3.vue",
"uniapp": "Message.uniapp.vue"
},
"variantDimensions": [
"tone",
"closable"
],
"behaviors": []
},
{
"slug": "mobile-overlay",
"name": "遮罩层 Overlay",
"tier": "mobile",
"category": "feedback",
"confidence": "high",
"specSection": "40 · 遮罩层 Overlay",
"contract": "components/mobile-overlay.json",
"frameworksPrefix": "Overlay",
"files": {
"css": "Overlay.css",
"html": "Overlay.html",
"jsx": "Overlay.jsx",
"vue2": "Overlay.vue2.vue",
"vue3": "Overlay.vue3.vue",
"uniapp": "Overlay.uniapp.vue"
},
"variantDimensions": [
"tone",
"contained"
],
"behaviors": []
},
{
"slug": "mobile-picker",
"name": "选择器 Picker",
"tier": "mobile",
"category": "input",
"confidence": "high",
"specSection": "43 · 选择器 Picker",
"contract": "components/mobile-picker.json",
"frameworksPrefix": "Picker",
"files": {
"css": "Picker.css",
"html": "Picker.html",
"jsx": "Picker.jsx",
"vue2": "Picker.vue2.vue",
"vue3": "Picker.vue3.vue",
"uniapp": "Picker.uniapp.vue"
},
"variantDimensions": [
"mode",
"round"
],
"behaviors": []
},
{
"slug": "mobile-popover",
"name": "弹出气泡 Popover",
"tier": "mobile",
"category": "feedback",
"confidence": "high",
"specSection": "41 · 弹出气泡 Popover",
"contract": "components/mobile-popover.json",
"frameworksPrefix": "Popover",
"files": {
"css": "Popover.css",
"html": "Popover.html",
"jsx": "Popover.jsx",
"vue2": "Popover.vue2.vue",
"vue3": "Popover.vue3.vue",
"uniapp": "Popover.uniapp.vue"
},
"variantDimensions": [
"placement",
"arrow"
],
"behaviors": []
},
{
"slug": "mobile-segmented",
"name": "分段器 Segmented",
"tier": "mobile",
"category": "navigation",
"confidence": "high",
"specSection": "38 · 分段器 Segmented",
"contract": "components/mobile-segmented.json",
"frameworksPrefix": "Segmented",
"files": {
"css": "Segmented.css",
"html": "Segmented.html",
"jsx": "Segmented.jsx",
"vue2": "Segmented.vue2.vue",
"vue3": "Segmented.vue3.vue",
"uniapp": "Segmented.uniapp.vue"
},
"variantDimensions": [
"size",
"block"
],
"behaviors": []
},
{
"slug": "mobile-sticky",
"name": "吸顶容器 Sticky",
"tier": "mobile",
"category": "navigation",
"confidence": "high",
"specSection": "39 · 吸顶容器 Sticky",
"contract": "components/mobile-sticky.json",
"frameworksPrefix": "Sticky",
"files": {
"css": "Sticky.css",
"html": "Sticky.html",
"jsx": "Sticky.jsx",
"vue2": "Sticky.vue2.vue",
"vue3": "Sticky.vue3.vue",
"uniapp": "Sticky.uniapp.vue"
},
"variantDimensions": [
"position",
"safeArea",
"shadow"
],
"behaviors": []
},
{
"slug": "mobile-table",
"name": "表格 Table",
"tier": "mobile",
"category": "display",
"confidence": "high",
"specSection": "47 · 表格 Table",
"contract": "components/mobile-table.json",
"frameworksPrefix": "Table",
"files": {
"css": "Table.css",
"html": "Table.html",
"jsx": "Table.jsx",
"vue2": "Table.vue2.vue",
"vue3": "Table.vue3.vue",
"uniapp": "Table.uniapp.vue"
},
"variantDimensions": [
"mode",
"size",
"stripe",
"bordered"
],
"behaviors": []
},
{
"slug": "mobile-typography",
"name": "排版 Typography",
"tier": "mobile",
"category": "display",
"confidence": "high",
"specSection": "37 · 排版 Typography",
"contract": "components/mobile-typography.json",
"frameworksPrefix": "Typography",
"files": {
"css": "Typography.css",
"html": "Typography.html",
"jsx": "Typography.jsx",
"vue2": "Typography.vue2.vue",
"vue3": "Typography.vue3.vue",
"uniapp": "Typography.uniapp.vue"
},
"variantDimensions": [
"level",
"ellipsis",
"copyable"
],
"behaviors": []
},
{
"slug": "mobile-upload",
"name": "上传 Upload",
"tier": "mobile",
"category": "input",
"confidence": "high",
"specSection": "46 · 上传 Upload",
"contract": "components/mobile-upload.json",
"frameworksPrefix": "Upload",
"files": {
"css": "Upload.css",
"html": "Upload.html",
"jsx": "Upload.jsx",
"vue2": "Upload.vue2.vue",
"vue3": "Upload.vue3.vue",
"uniapp": "Upload.uniapp.vue"
},
"variantDimensions": [
"variant",
"maxCount"
],
"behaviors": []
}
],
"endLabels": {
"css": "纯样式(CSS)",
"html": "H5 原生(无框架)",
"jsx": "React",
"vue2": "Vue 2",
"vue3": "Vue 3",
"uniapp": "uni-app(跨端:小程序 / App / H5)"
},
"uniappTargets": [
"app-plus",
"mp-weixin",
"h5"
],
"uniappNotes": "uni-app 端目标三选:app-plus(App)/ mp-weixin(微信小程序)/ h5(浏览器)。移动端组件的 uni-app 实现用 uni 基础组件(view/text)+ rpx + touch 事件;PC 平台另有独立的 uni-app 列,见 .design_library/kole-ui-uniapp/index.json。",
"categories": {
"order": [
"general",
"navigation",
"input",
"display",
"feedback",
"system"
],
"labels": {
"general": "通用",
"navigation": "导航",
"input": "数据录入",
"display": "数据展示",
"feedback": "反馈",
"system": "工具与系统"
},
"note": "分类口径与 PC 端一致(site/app.js 的 CAT_KEYS/CAT_EN 同源),便于两端用同一套 IA 导航。"
}
}