{ "schemaVersion": 1, "sourceKind": "family-model", "generatedBy": "tools/gen-families.mjs", "note": "由 tools/lib/family-model.mjs 生成,勿手改。族把「同源组件」表达为「1 个基座 + N 个参数取值」;组件身份(slug)保持不变,data.json 仍完整输出 79 个组件。", "totalFamilies": 13, "totalMembers": 44, "implementedFamilies": [ "nav-menu" ], "families": [ { "id": "nav-menu", "label": "导航菜单", "base": "sidemenu", "mergeBasis": "topmenu 与 sidemenu 的 semanticTypeCandidates 分别为 menu|topnav 与 menu|sidebar,同一 menu 语义的两个 direction 取值;mixednavigation 的 anatomy 即 [top/side/sync/memory],本身就是前两者的参数化组合。sidemenu 实现内已存在通用 menu 词汇(kole-menu-item/icon/label/badge/arrow/children/pop)。", "paramSurface": [ { "name": "direction", "type": "enum", "values": [ "top", "side", "mixed" ], "default": "side", "desc": "导航方向,决定一级菜单的排布" }, { "name": "collapsed", "type": "bool", "default": false, "desc": "侧边模式折叠为仅图标,悬停弹出子级" }, { "name": "level", "type": "enum", "values": [ "1", "2" ], "default": "2", "desc": "最大层级;mixed 固定 2 级(顶一级 + 侧二级)" }, { "name": "badge", "type": "bool", "default": false, "desc": "菜单项徽章" }, { "name": "indicator", "type": "enum", "values": [ "none", "top", "left" ], "default": "left", "desc": "选中指示条;top 模式默认 top,side 模式默认 left" } ], "members": [ { "slug": "sidemenu", "role": "base", "params": { "direction": "side", "indicator": "left", "collapsed": false }, "frameworksPrefix": "SideMenu" }, { "slug": "topmenu", "role": "variant", "params": { "direction": "top", "indicator": "top", "collapsed": false }, "frameworksPrefix": "TopMenu" }, { "slug": "mixednavigation", "role": "variant", "params": { "direction": "mixed", "level": "2", "collapsed": false }, "frameworksPrefix": "MixedNavigation" } ], "basePrefix": "SideMenu", "memberCount": 3 }, { "id": "table", "label": "数据表格", "base": "table", "mergeBasis": "六个成员的 semanticTypeCandidates 首项均为 table;每个变体的 anatomy 都是 Table 骨架(header/row/cell/selectedRow)加一个能力维度。treetable 额外带 indent/arrow/parentRow/childRow,是 table 的超集而非并列组件。", "paramSurface": [ { "name": "expandable", "type": "bool", "default": false, "desc": "行展开;anatomy 增 icon/content/state" }, { "name": "fixedTarget", "type": "enum", "values": [ "none", "left", "right", "header" ], "default": "none", "desc": "固定列 / 固定表头" }, { "name": "mergeAxis", "type": "enum", "values": [ "none", "vertical", "horizontal" ], "default": "none", "desc": "单元格合并轴向" }, { "name": "summary", "type": "enum", "values": [ "none", "top", "bottom" ], "default": "none", "desc": "统计行位置" }, { "name": "treeMode", "type": "bool", "default": false, "desc": "树形层级(缩进 16px/级 + 展开箭头)" } ], "members": [ { "slug": "table", "role": "base", "params": {}, "frameworksPrefix": "Table" }, { "slug": "expandabletable", "role": "variant", "params": { "expandable": true }, "frameworksPrefix": "ExpandableTable" }, { "slug": "fixedcolumntable", "role": "variant", "params": { "fixedTarget": "left" }, "frameworksPrefix": "FixedColumnTable" }, { "slug": "mergedcelltable", "role": "variant", "params": { "mergeAxis": "vertical" }, "frameworksPrefix": "MergedCellTable" }, { "slug": "summaryrowtable", "role": "variant", "params": { "summary": "bottom" }, "frameworksPrefix": "SummaryRowTable" }, { "slug": "treetable", "role": "variant", "params": { "treeMode": true }, "frameworksPrefix": "TreeTable" } ], "basePrefix": "Table", "memberCount": 6 }, { "id": "masked-input", "label": "掩码输入", "base": "input", "mergeBasis": "七个成员的 semanticTypeCandidates 第二项均为 input;anatomy 均为 input 加 format / validate / segment 的子集。差异只是掩码规则与校验规则不同,结构完全同源。", "paramSurface": [ { "name": "mask", "type": "string", "default": "", "desc": "掩码模式(每 4 位空格、6/8/4 分段、7/8 位车牌等)" }, { "name": "length", "type": "int", "default": 0, "desc": "期望长度;0 表示不限" }, { "name": "segment", "type": "list", "default": [], "desc": "分段长度数组,如 [6,8,4]" }, { "name": "validate", "type": "enum", "values": [ "none", "luhn", "checksum", "regex" ], "default": "none", "desc": "校验规则" }, { "name": "scan", "type": "bool", "default": false, "desc": "扫码 / 识别入口" }, { "name": "autoFocusNext", "type": "bool", "default": false, "desc": "输入满格自动跳下一格" }, { "name": "masked", "type": "bool", "default": false, "desc": "回显脱敏(密码)" } ], "members": [ { "slug": "input", "role": "base", "params": {}, "frameworksPrefix": "Input" }, { "slug": "codeinput", "role": "variant", "params": { "length": 6, "autoFocusNext": true, "scan": false }, "frameworksPrefix": "CodeInput" }, { "slug": "passwordinput", "role": "variant", "params": { "masked": true }, "frameworksPrefix": "PasswordInput" }, { "slug": "phoneinput", "role": "variant", "params": { "mask": "3-4-4", "length": 11 }, "frameworksPrefix": "PhoneInput" }, { "slug": "idcardinput", "role": "variant", "params": { "segment": [ 6, 8, 4 ], "length": 18, "scan": true }, "frameworksPrefix": "IDCardInput" }, { "slug": "bankcardinput", "role": "variant", "params": { "mask": "4-4-4-4", "validate": "luhn", "scan": true }, "frameworksPrefix": "BankCardInput" }, { "slug": "plateinput", "role": "variant", "params": { "length": 7, "validate": "regex" }, "frameworksPrefix": "PlateInput" } ], "basePrefix": "Input", "memberCount": 7 }, { "id": "modal-shell", "label": "对话弹窗", "base": "modal", "mergeBasis": "alertmodal 与 confirmmodal 的 doNotInvent 原文写着「弹窗尺寸档位(见 Modal 契约)」——规范自身声明从属。四个变体的 anatomy 均为 mask/container/title/content/footer 的子集或替换。popconfirm(240px 无遮罩面板)与 bottomsheet(底部滑出)不属本族:archetype 不同。", "paramSurface": [ { "name": "size", "type": "enum", "values": [ "sm", "md", "lg" ], "default": "md", "desc": "宽度档位" }, { "name": "tone", "type": "enum", "values": [ "none", "success", "error", "warning", "info" ], "default": "none", "desc": "语义色 + 图标" }, { "name": "footer", "type": "enum", "values": [ "none", "confirm", "confirm-cancel" ], "default": "confirm-cancel", "desc": "底部操作" }, { "name": "columns", "type": "enum", "values": [ "1", "2" ], "default": "1", "desc": "表单类弹窗的列数" }, { "name": "fullscreen", "type": "bool", "default": false, "desc": "全屏铺满" } ], "members": [ { "slug": "modal", "role": "base", "params": {}, "frameworksPrefix": "Modal" }, { "slug": "alertmodal", "role": "variant", "params": { "tone": "info", "footer": "confirm" }, "frameworksPrefix": "AlertModal" }, { "slug": "confirmmodal", "role": "variant", "params": { "footer": "confirm-cancel" }, "frameworksPrefix": "ConfirmModal" }, { "slug": "formmodal", "role": "variant", "params": { "columns": "2", "footer": "confirm-cancel" }, "frameworksPrefix": "FormModal" }, { "slug": "fullscreenmodal", "role": "variant", "params": { "fullscreen": true }, "frameworksPrefix": "FullScreenModal" } ], "basePrefix": "Modal", "memberCount": 5 }, { "id": "preference-switcher", "label": "偏好切换器", "base": "themeswitcher", "mergeBasis": "三个成员的 anatomy 全部包含 persist,structurePatterns 全部写着持久化到 localStorage,semanticTypeCandidates 末项均为 preference,变体维度均为同一形态的 3 档选项。三者完全同构,仅选项内容不同。", "paramSurface": [ { "name": "options", "type": "list", "default": [], "desc": "选项数组 [{value,label,preview?}]" }, { "name": "selected", "type": "string", "default": "", "desc": "当前选中值" }, { "name": "persistKey", "type": "string", "default": "", "desc": "localStorage 键名;空则持久化到内存" }, { "name": "applyScope", "type": "enum", "values": [ "global", "local" ], "default": "global", "desc": "生效范围:全站令牌 / 局部预览" }, { "name": "extra", "type": "enum", "values": [ "none", "brand-palette", "demo-list" ], "default": "none", "desc": "附加区块(品牌色板 / 示例列表)" } ], "members": [ { "slug": "themeswitcher", "role": "base", "params": { "extra": "brand-palette", "applyScope": "global" }, "frameworksPrefix": "ThemeSwitcher" }, { "slug": "layoutswitcher", "role": "variant", "params": { "extra": "none", "applyScope": "global" }, "frameworksPrefix": "LayoutSwitcher" }, { "slug": "densityswitcher", "role": "variant", "params": { "extra": "demo-list", "applyScope": "global" }, "frameworksPrefix": "DensitySwitcher" } ], "basePrefix": "ThemeSwitcher", "memberCount": 3 }, { "id": "card-shell", "label": "卡片容器", "base": "card", "mergeBasis": "四个成员的 semanticTypeCandidates 均含 card 或 panel,anatomy 均为 card 骨架(style/padding/section)加各自填充区。本轮不合并实现:employeecard 有独立的字段面(status/contact),合并会污染 card 参数面,仅登记族关系。", "paramSurface": [ { "name": "style", "type": "enum", "values": [ "plain", "outlined" ], "default": "plain", "desc": "描边 / 阴影" }, { "name": "padding", "type": "enum", "values": [ "md", "lg" ], "default": "md", "desc": "内边距档位" }, { "name": "sections", "type": "list", "default": [], "desc": "区块序列:header/body/footer/media" }, { "name": "actions", "type": "list", "default": [], "desc": "操作区按钮" }, { "name": "layout", "type": "enum", "values": [ "vertical", "horizontal" ], "default": "vertical", "desc": "内容排布方向" } ], "members": [ { "slug": "card", "role": "base", "params": {}, "frameworksPrefix": "Card" }, { "slug": "dashboardcard", "role": "variant", "params": { "layout": "horizontal" }, "frameworksPrefix": "DashboardCard" }, { "slug": "employeecard", "role": "variant", "params": { "sections": [ "media", "body" ] }, "frameworksPrefix": "EmployeeCard" }, { "slug": "chartpanel", "role": "variant", "params": { "sections": [ "header", "body" ] }, "frameworksPrefix": "ChartPanel" } ], "mergeStatus": "registered-only", "basePrefix": "Card", "memberCount": 4 }, { "id": "feedback-page", "label": "结果与异常页", "base": "resultvariants", "mergeBasis": "三个成员的 semanticTypeCandidates 分别为 result|feedback-page、exception|error-page、empty|placeholder,均为「占满内容区的状态说明 + 插画 + 操作」。resultvariants.status[4] 与 exceptionvariants.code[4] 同构。", "paramSurface": [ { "name": "status", "type": "enum", "values": [ "success", "error", "warning", "info", "empty" ], "default": "info", "desc": "状态语义" }, { "name": "illustration", "type": "enum", "values": [ "none", "icon", "image" ], "default": "icon", "desc": "插画形态" }, { "name": "extra", "type": "list", "default": [], "desc": "底部操作区" } ], "members": [ { "slug": "resultvariants", "role": "base", "params": {}, "frameworksPrefix": "ResultVariants" }, { "slug": "exceptionvariants", "role": "variant", "params": { "status": "error" }, "frameworksPrefix": "ExceptionVariants" }, { "slug": "emptypro", "role": "variant", "params": { "status": "empty" }, "frameworksPrefix": "EmptyPro" } ], "basePrefix": "ResultVariants", "memberCount": 3 }, { "id": "loading-state", "label": "加载态", "base": "loadingoverlay", "mergeBasis": "三个成员的 semanticTypeCandidates 分别为 overlay|loading、skeleton|placeholder、progress|indicator,是同一语义(加载中)的三种承载形态,共享 coverage / status / showText 三要素。", "paramSurface": [ { "name": "shape", "type": "enum", "values": [ "overlay", "block", "bar" ], "default": "overlay", "desc": "承载形态:遮罩 / 占位块 / 进度条" }, { "name": "status", "type": "enum", "values": [ "active", "success", "exception" ], "default": "active", "desc": "状态" }, { "name": "coverage", "type": "enum", "values": [ "full", "local" ], "default": "local", "desc": "覆盖范围" }, { "name": "showText", "type": "bool", "default": false, "desc": "显示文案 / 百分比" } ], "members": [ { "slug": "loadingoverlay", "role": "base", "params": { "shape": "overlay" }, "frameworksPrefix": "LoadingOverlay" }, { "slug": "skeletonpro", "role": "variant", "params": { "shape": "block" }, "frameworksPrefix": "SkeletonPro" }, { "slug": "progressvariants", "role": "variant", "params": { "shape": "bar" }, "frameworksPrefix": "ProgressVariants" } ], "basePrefix": "LoadingOverlay", "memberCount": 3 }, { "id": "steps", "label": "步骤", "base": "steps", "mergeBasis": "steps 与 steplist 的 semanticTypeCandidates 完全相同(均为 steps|wizard),变体维度同为 orientation[2] + state[3]。唯一差异是节点形态(横向步骤条 / 纵向列表)。", "paramSurface": [ { "name": "nodeStyle", "type": "enum", "values": [ "bar", "list" ], "default": "bar", "desc": "步骤条 / 步骤列表" }, { "name": "orientation", "type": "enum", "values": [ "horizontal", "vertical" ], "default": "horizontal", "desc": "排布方向" }, { "name": "editable", "type": "bool", "default": false, "desc": "可点击回退" } ], "members": [ { "slug": "steps", "role": "base", "params": { "nodeStyle": "bar" }, "frameworksPrefix": "Steps" }, { "slug": "steplist", "role": "variant", "params": { "nodeStyle": "list", "orientation": "vertical" }, "frameworksPrefix": "StepList" } ], "basePrefix": "Steps", "memberCount": 2 }, { "id": "tabs", "label": "标签页", "base": "tabs", "mergeBasis": "tabs 的 semanticTypeCandidates 为 tabs|tabnav,enhancedtabnav 为 tabs|browser-tabs;enhancedtabnav 的变体维度 state[4]+feature[2] 是 tabs 的 state[4] 超集 —— 增强项即参数。", "paramSurface": [ { "name": "type", "type": "enum", "values": [ "line", "card" ], "default": "line", "desc": "标签形态" }, { "name": "draggable", "type": "bool", "default": false, "desc": "拖拽排序" }, { "name": "contextMenu", "type": "bool", "default": false, "desc": "右键菜单" }, { "name": "unsavedMark", "type": "bool", "default": false, "desc": "未保存标记" } ], "members": [ { "slug": "tabs", "role": "base", "params": {}, "frameworksPrefix": "Tabs" }, { "slug": "enhancedtabnav", "role": "variant", "params": { "draggable": true, "contextMenu": true, "unsavedMark": true }, "frameworksPrefix": "EnhancedTabNav" } ], "basePrefix": "Tabs", "memberCount": 2 }, { "id": "notice", "label": "全局轻提示", "base": "messagepro", "mergeBasis": "messagepro 为 message|toast、notificationpro 为 notification|notice,同属全局轻提示;差异只在承载形态(顶部条 / 卡片)与位置,type/action/duration 三要素共享。", "paramSurface": [ { "name": "placement", "type": "enum", "values": [ "top", "top-right", "bottom" ], "default": "top", "desc": "出现位置" }, { "name": "type", "type": "enum", "values": [ "success", "error", "warning", "info", "loading" ], "default": "info", "desc": "语义类型" }, { "name": "action", "type": "bool", "default": false, "desc": "操作按钮" }, { "name": "duration", "type": "int", "default": 3000, "desc": "自动关闭毫秒数;0 为不自动关闭" } ], "members": [ { "slug": "messagepro", "role": "base", "params": { "placement": "top" }, "frameworksPrefix": "MessagePro" }, { "slug": "notificationpro", "role": "variant", "params": { "placement": "top-right", "action": true }, "frameworksPrefix": "NotificationPro" } ], "basePrefix": "MessagePro", "memberCount": 2 }, { "id": "selection-card", "label": "选择卡片", "base": "radiocard", "mergeBasis": "radiocard(radio|card)与 checkboxcard(checkbox|card)的 anatomy 同为 card + 选中态 + 内嵌操作,变体维度均含 selection,差异仅为单选 / 多选语义。", "paramSurface": [ { "name": "mode", "type": "enum", "values": [ "single", "multiple" ], "default": "single", "desc": "单选 / 多选" }, { "name": "content", "type": "enum", "values": [ "text", "rich" ], "default": "text", "desc": "内容形态" }, { "name": "innerActions", "type": "bool", "default": false, "desc": "卡片内嵌操作区" } ], "members": [ { "slug": "radiocard", "role": "base", "params": { "mode": "single" }, "frameworksPrefix": "RadioCard" }, { "slug": "checkboxcard", "role": "variant", "params": { "mode": "multiple", "innerActions": true }, "frameworksPrefix": "CheckboxCard" } ], "basePrefix": "RadioCard", "memberCount": 2 }, { "id": "combobox", "label": "候选输入", "base": "autocomplete", "mergeBasis": "autocomplete(combobox|input)与 mention(mention|input)的 anatomy 均为 input + 候选面板 + 键盘选择,类名集合 Jaccard 0.448(全库最高组之一);差异仅为触发方式(连续输入 / 触发符)与插入行为。", "paramSurface": [ { "name": "trigger", "type": "enum", "values": [ "input", "symbol" ], "default": "input", "desc": "触发方式:连续输入 / 触发符" }, { "name": "suggestionSource", "type": "enum", "values": [ "static", "async" ], "default": "static", "desc": "候选来源" }, { "name": "itemRender", "type": "enum", "values": [ "plain", "custom" ], "default": "plain", "desc": "候选项渲染" }, { "name": "insert", "type": "enum", "values": [ "replace", "token" ], "default": "replace", "desc": "选中后插入行为" } ], "members": [ { "slug": "autocomplete", "role": "base", "params": { "trigger": "input" }, "frameworksPrefix": "AutoComplete" }, { "slug": "mention", "role": "variant", "params": { "trigger": "symbol", "insert": "token" }, "frameworksPrefix": "Mention" } ], "basePrefix": "AutoComplete", "memberCount": 2 } ] }