{
  "canonical": "https://github.com/materin-tech/materin-ui",
  "contract": {
    "version": "0.1",
    "pattern": "materin-<scope>-<component>[__part][--variant]",
    "utility_pattern": "materin-u-<name>",
    "state_pattern": "is-<state>",
    "scopes": [
      "ui",
      "site",
      "docs",
      "office",
      "view",
      "ctx"
    ],
    "rules": [
      "每个组件一个名字，名字里带 scope 和用途；不用裸类名（.card / .btn）",
      "组件内部结构用 __part，变体用 --variant，状态用 is-<state> 或 ARIA 属性",
      "一个组件只有一个名字，不做别名，否则按名查找会落空",
      "组件不写死色值，只引用 --materin-* 令牌",
      "工具类不承载视觉身份，只做布局与文字处理，前缀 materin-u-",
      "i18n 类固定为 lang-zh / lang-en，不属于组件，不参与重命名"
    ]
  },
  "tokens_file": "tokens/materin-ui.css",
  "registry_rules": [
    "parts / variants 用简写：parts 写全名（父名__part），variants 只写 --variant",
    "repo 字段指向组件实现所在的仓库；本站组件在 materin-tech.github.io",
    "清单是给 tools/check-components.py 读的，不是文档：名字与实现不允许对不上",
    "Vue 组件库的条目 file 指向 .vue（其 <style> 块即组件层样式）；变体只写 --variant，部件写全名"
  ],
  "pending": {
    "note": "以下仓库尚未接入契约，数值为实测（styles.css 行数 / 类名数）",
    "repos": [
      {
        "repo": "leapord/Materin-office",
        "scope": "office",
        "styles_lines": 534,
        "class_names": 76,
        "status": "类名已是 materin-office-*；待换令牌（强调色 / 状态色 / 硬编码 #1f1f1f、#ffffff）"
      },
      {
        "repo": "leapord/Materin-view",
        "scope": "view",
        "styles_lines": 608,
        "class_names": 108,
        "status": "多数已是 materin-view-*；materin-chip、materin-doc-* 缺 scope 段，待改名为 materin-view-*"
      },
      {
        "repo": "leapord/Materin-ctx",
        "scope": "ctx",
        "styles_lines": 135,
        "class_names": 20,
        "status": "类名已是 materin-ctx-*；待把写死的 #3a7d44 / #b8860b / #c2711d 换成 --materin-ok/warn/error"
      }
    ]
  },
  "components": [
    {
      "name": "materin-ui-page-header",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components",
      "purpose": {
        "zh": "路线图收尾组件",
        "en": "Roadmap finishing component"
      },
      "parts": [
        "materin-ui-page-header__description",
        "materin-ui-page-header__extra",
        "materin-ui-page-header__left",
        "materin-ui-page-header__title"
      ],
      "variants": [],
      "states": [],
      "batch": "F2-final"
    },
    {
      "name": "materin-ui-button-group",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components",
      "purpose": {
        "zh": "路线图收尾组件",
        "en": "Roadmap finishing component"
      },
      "parts": [],
      "variants": [
        "--sm"
      ],
      "states": [],
      "batch": "F2-final"
    },
    {
      "name": "materin-ui-splitter",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components",
      "purpose": {
        "zh": "路线图收尾组件",
        "en": "Roadmap finishing component"
      },
      "parts": [
        "materin-ui-splitter__pane",
        "materin-ui-splitter__handle"
      ],
      "variants": [
        "--horizontal",
        "--vertical"
      ],
      "states": [
        "is-dragging"
      ],
      "batch": "F2-final"
    },
    {
      "name": "materin-ui-mention",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components",
      "purpose": {
        "zh": "路线图收尾组件",
        "en": "Roadmap finishing component"
      },
      "parts": [
        "materin-ui-mention__field",
        "materin-ui-mention__list",
        "materin-ui-mention__option"
      ],
      "variants": [],
      "states": [],
      "batch": "F2-final"
    },
    {
      "name": "materin-ui-time-select",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components",
      "purpose": {
        "zh": "路线图收尾组件",
        "en": "Roadmap finishing component"
      },
      "parts": [
        "materin-ui-time-select__field",
        "materin-ui-time-select__panel",
        "materin-ui-time-select__option"
      ],
      "variants": [],
      "states": [
        "is-open"
      ],
      "batch": "F2-final"
    },
    {
      "name": "materin-ui-tree-select",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components",
      "purpose": {
        "zh": "路线图收尾组件",
        "en": "Roadmap finishing component"
      },
      "parts": [
        "materin-ui-tree-select__field",
        "materin-ui-tree-select__panel"
      ],
      "variants": [],
      "states": [
        "is-open"
      ],
      "batch": "F2-final"
    },
    {
      "name": "materin-ui-page-shell",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/page-shell/PageShell.vue",
      "purpose": {
        "zh": "页面骨架：顶栏 + 侧栏 + 主区 + 底栏的整页骨架",
        "en": "Page shell: full-page skeleton with header, aside, main and footer"
      },
      "parts": [
        "materin-ui-page-shell__aside",
        "materin-ui-page-shell__body",
        "materin-ui-page-shell__footer",
        "materin-ui-page-shell__header",
        "materin-ui-page-shell__main"
      ],
      "variants": [],
      "states": [],
      "batch": "F-extra"
    },
    {
      "name": "materin-ui-glass-panel",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/glass-panel/GlassPanel.vue",
      "purpose": {
        "zh": "毛玻璃面板：透明令牌驱动，自动降级",
        "en": "Glass panel: token-driven translucency with automatic fallback"
      },
      "parts": [],
      "variants": [
        "--normal",
        "--strong",
        "--subtle"
      ],
      "states": [],
      "batch": "F-extra"
    },
    {
      "name": "materin-ui-status-dot",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/status-dot/StatusDot.vue",
      "purpose": {
        "zh": "状态点：ok/warn/error/info 四色小圆点",
        "en": "Status dot: four-colour dot for ok, warn, error, info"
      },
      "parts": [
        "materin-ui-status-dot__pulse"
      ],
      "variants": [
        "--ok",
        "--warn",
        "--error",
        "--info"
      ],
      "states": [],
      "batch": "F-extra"
    },
    {
      "name": "materin-ui-method-tag",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/method-tag/MethodTag.vue",
      "purpose": {
        "zh": "HTTP 方法徽标：GET/POST/PUT/PATCH/DELETE 各自配色",
        "en": "HTTP method badge: GET, POST, PUT, PATCH, DELETE colour-coded"
      },
      "parts": [],
      "variants": [
        "--get",
        "--post",
        "--put",
        "--patch",
        "--delete"
      ],
      "states": [],
      "batch": "F-extra"
    },
    {
      "name": "materin-ui-copy",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/copy/Copy.vue",
      "purpose": {
        "zh": "复制按钮：点一下复制文本并给反馈",
        "en": "Copy: copies text with feedback on click"
      },
      "parts": [
        "materin-ui-copy__button",
        "materin-ui-copy__feedback"
      ],
      "variants": [],
      "states": [],
      "batch": "F-extra"
    },
    {
      "name": "materin-ui-icon",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/icon/Icon.vue",
      "purpose": {
        "zh": "图标：内置一套线性小图标的统一入口",
        "en": "Icon: one entry for the built-in line icon set"
      },
      "parts": [],
      "variants": [
        "--sm",
        "--lg"
      ],
      "states": [],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-config-provider",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/config-provider/ConfigProvider.vue",
      "purpose": {
        "zh": "配置注入：向子树下发命名空间主题",
        "en": "Config provider: injects namespace theming down the tree"
      },
      "parts": [],
      "variants": [],
      "states": [],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-scrollbar",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/scrollbar/Scrollbar.vue",
      "purpose": {
        "zh": "滚动条：统一样式的滚动容器",
        "en": "Scrollbar: a scroll container with the house style"
      },
      "parts": [
        "materin-ui-scrollbar__view"
      ],
      "variants": [
        "--thin"
      ],
      "states": [],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-carousel",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/carousel/Carousel.vue",
      "purpose": {
        "zh": "轮播：自动播放、指示点、左右切换",
        "en": "Carousel: autoplay, indicators, prev and next"
      },
      "parts": [
        "materin-ui-carousel__indicator",
        "materin-ui-carousel__indicators",
        "materin-ui-carousel__nav",
        "materin-ui-carousel__nav--next",
        "materin-ui-carousel__nav--prev",
        "materin-ui-carousel__slide",
        "materin-ui-carousel__track"
      ],
      "variants": [],
      "states": [
        "is-active"
      ],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-autocomplete",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/autocomplete/Autocomplete.vue",
      "purpose": {
        "zh": "自动补全：输入过滤建议，键盘可选",
        "en": "Autocomplete: filtered suggestions with keyboard navigation"
      },
      "parts": [
        "materin-ui-autocomplete__field",
        "materin-ui-autocomplete__list",
        "materin-ui-autocomplete__option"
      ],
      "variants": [],
      "states": [
        "is-open",
        "is-active"
      ],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-color-picker",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/color-picker/ColorPicker.vue",
      "purpose": {
        "zh": "颜色选择：预设色板 + 原生取色器，受控",
        "en": "Color picker: preset swatches plus native input, controlled"
      },
      "parts": [
        "materin-ui-color-picker__input",
        "materin-ui-color-picker__swatch",
        "materin-ui-color-picker__value"
      ],
      "variants": [],
      "states": [],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-cascader",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/cascader/Cascader.vue",
      "purpose": {
        "zh": "级联选择：逐级展开列，受控",
        "en": "Cascader: expanding column picker, controlled"
      },
      "parts": [
        "materin-ui-cascader__arrow",
        "materin-ui-cascader__column",
        "materin-ui-cascader__columns",
        "materin-ui-cascader__field",
        "materin-ui-cascader__option"
      ],
      "variants": [],
      "states": [
        "is-open",
        "is-active"
      ],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-transfer",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/transfer/Transfer.vue",
      "purpose": {
        "zh": "穿梭框：左右两栏勾选移动，可搜索",
        "en": "Transfer: two panels with check-move, optional filter"
      },
      "parts": [
        "materin-ui-transfer__actions",
        "materin-ui-transfer__head",
        "materin-ui-transfer__list",
        "materin-ui-transfer__option",
        "materin-ui-transfer__panel"
      ],
      "variants": [],
      "states": [
        "is-checked"
      ],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-upload",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/upload/Upload.vue",
      "purpose": {
        "zh": "上传：文件列表、进度、失败重试、多选",
        "en": "Upload: file list, progress, retry on failure, multiple"
      },
      "parts": [
        "materin-ui-upload__error",
        "materin-ui-upload__input",
        "materin-ui-upload__item",
        "materin-ui-upload__list",
        "materin-ui-upload__name",
        "materin-ui-upload__remove",
        "materin-ui-upload__retry",
        "materin-ui-upload__size",
        "materin-ui-upload__trigger"
      ],
      "variants": [],
      "states": [
        "is-error"
      ],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-time-picker",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/time-picker/TimePicker.vue",
      "purpose": {
        "zh": "时间选择：时分两列滚动或步进",
        "en": "Time picker: hour and minute columns"
      },
      "parts": [
        "materin-ui-time-picker__field"
      ],
      "variants": [],
      "states": [
        "is-open"
      ],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-date-picker",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/date-picker/DatePicker.vue",
      "purpose": {
        "zh": "日期选择：月历面板、受控、禁用过去日期",
        "en": "Date picker: month panel, controlled, optional past disabling"
      },
      "parts": [
        "materin-ui-date-picker__field",
        "materin-ui-date-picker__grid",
        "materin-ui-date-picker__head",
        "materin-ui-date-picker__month",
        "materin-ui-date-picker__nav",
        "materin-ui-date-picker__panel"
      ],
      "variants": [],
      "states": [
        "is-open"
      ],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-affix",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/affix/Affix.vue",
      "purpose": {
        "zh": "固钉：滚动越过阈值后固定在视口",
        "en": "Affix: pins to the viewport once scrolled past"
      },
      "parts": [
        "materin-ui-affix__inner"
      ],
      "variants": [],
      "states": [
        "is-fixed"
      ],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-backtop__button",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/backtop/Backtop.vue",
      "purpose": {
        "zh": "回到顶部：滚动过阈值浮现",
        "en": "Back to top: appears past a scroll threshold"
      },
      "parts": [],
      "variants": [],
      "states": [],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-anchor",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/anchor/Anchor.vue",
      "purpose": {
        "zh": "锚点：滚动监听高亮当前区块",
        "en": "Anchor: scroll-spy highlighting of the current section"
      },
      "parts": [
        "materin-ui-anchor__link"
      ],
      "variants": [],
      "states": [
        "is-active"
      ],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-dropdown",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/dropdown/Dropdown.vue",
      "purpose": {
        "zh": "下拉菜单：点击弹出命令列表，点外关闭",
        "en": "Dropdown: click-triggered command list, closes on outside click"
      },
      "parts": [
        "materin-ui-dropdown__button",
        "materin-ui-dropdown__menu",
        "materin-ui-dropdown__option",
        "materin-ui-dropdown__trigger"
      ],
      "variants": [
        "--top",
        "--bottom"
      ],
      "states": [
        "is-open"
      ],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-steps",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/steps/Steps.vue",
      "purpose": {
        "zh": "步骤条：横向流程，完成/进行/等待三态",
        "en": "Steps: horizontal flow with done, current and waiting states"
      },
      "parts": [
        "materin-ui-steps__item",
        "materin-ui-steps__index",
        "materin-ui-steps__title",
        "materin-ui-steps__connector"
      ],
      "variants": [],
      "states": [
        "is-done",
        "is-current"
      ],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-breadcrumb",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/breadcrumb/Breadcrumb.vue",
      "purpose": {
        "zh": "面包屑：层级路径与分隔符",
        "en": "Breadcrumb: trail with separators"
      },
      "parts": [
        "materin-ui-breadcrumb__item",
        "materin-ui-breadcrumb__sep"
      ],
      "variants": [],
      "states": [],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-tabs",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/tabs/Tabs.vue",
      "purpose": {
        "zh": "标签页：滑动切换，受控可用",
        "en": "Tabs: switching panes, works controlled"
      },
      "parts": [
        "materin-ui-tabs__list",
        "materin-ui-tabs__tab",
        "materin-ui-tabs__panels",
        "materin-ui-tabs__panel"
      ],
      "variants": [],
      "states": [
        "is-active"
      ],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-menu",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/menu/Menu.vue",
      "purpose": {
        "zh": "菜单：垂直/水平、分组与子级、受控选中",
        "en": "Menu: vertical or horizontal, groups and submenus, controlled selection"
      },
      "parts": [
        "materin-ui-menu__group",
        "materin-ui-menu__group-title",
        "materin-ui-menu__item",
        "materin-ui-menu__sub",
        "materin-ui-menu__sub-wrap"
      ],
      "variants": [
        "--horizontal"
      ],
      "states": [
        "is-active",
        "is-open"
      ],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-infinite-scroll",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/infinite-scroll/InfiniteScroll.vue",
      "purpose": {
        "zh": "无限滚动：触底触发 loadMore，可停",
        "en": "Infinite scroll: fires loadMore near bottom, stoppable"
      },
      "parts": [
        "materin-ui-infinite-scroll__sentinel",
        "materin-ui-infinite-scroll__tip"
      ],
      "variants": [],
      "states": [
        "is-disabled"
      ],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-watermark",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/watermark/Watermark.vue",
      "purpose": {
        "zh": "水印：canvas 纹理平铺，被删改自动重画",
        "en": "Watermark: tiled canvas texture that redraws if tampered"
      },
      "parts": [
        "materin-ui-watermark__layer"
      ],
      "variants": [],
      "states": [],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-qrcode",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/qrcode/QRCode.vue",
      "purpose": {
        "zh": "二维码：canvas 渲染、四档纠错、自动选版本",
        "en": "QR code: canvas render, four EC levels, automatic version"
      },
      "parts": [
        "materin-ui-qrcode__canvas",
        "materin-ui-qrcode__placeholder"
      ],
      "variants": [
        "--bordered"
      ],
      "states": [],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-calendar",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/calendar/Calendar.vue",
      "purpose": {
        "zh": "日历：月视图网格，可选中日期，可禁用早于今天",
        "en": "Calendar: month grid, selectable dates, optional past disabling"
      },
      "parts": [
        "materin-ui-calendar__cell",
        "materin-ui-calendar__grid",
        "materin-ui-calendar__head",
        "materin-ui-calendar__month",
        "materin-ui-calendar__nav",
        "materin-ui-calendar__weekday"
      ],
      "variants": [],
      "states": [
        "is-selected",
        "is-today",
        "is-outside",
        "is-disabled"
      ],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-table",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/table/Table.vue",
      "purpose": {
        "zh": "表格：列配置驱动，斑马纹、边框、空态",
        "en": "Table: column-driven, striped, bordered, empty state"
      },
      "parts": [
        "materin-ui-table__body",
        "materin-ui-table__empty",
        "materin-ui-table__head",
        "materin-ui-table__wrap"
      ],
      "variants": [
        "--striped",
        "--bordered"
      ],
      "states": [],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-tree",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/tree/Tree.vue",
      "purpose": {
        "zh": "树：层级勾选、展开收起、受控可用",
        "en": "Tree: hierarchical checks, expand and collapse, works controlled"
      },
      "parts": [
        "materin-ui-tree__row",
        "materin-ui-tree__indent",
        "materin-ui-tree__expand",
        "materin-ui-tree__checkbox",
        "materin-ui-tree__label",
        "materin-ui-tree__children"
      ],
      "variants": [],
      "states": [
        "is-expanded"
      ],
      "batch": "F-final"
    },
    {
      "name": "materin-ui-progress__ring-bar",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/progress/Progress.vue",
      "purpose": {
        "zh": "进度条内部件的状态色",
        "en": "Status colours of progress internals"
      },
      "parts": [],
      "variants": [
        "--success",
        "--warning",
        "--error"
      ],
      "states": [],
      "batch": "E1-data"
    },
    {
      "name": "materin-ui-progress__bar",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/progress/Progress.vue",
      "purpose": {
        "zh": "进度条内部件的状态色",
        "en": "Status colours of progress internals"
      },
      "parts": [],
      "variants": [
        "--success",
        "--warning",
        "--error"
      ],
      "states": [],
      "batch": "E1-data"
    },
    {
      "name": "materin-ui-timeline-item",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/timeline-item/TimelineItem.vue",
      "purpose": {
        "zh": "时间线的单项（节点 + 时间戳 + 内容），一般放在 MiTimeline 里用",
        "en": "A single timeline entry (node, timestamp and content), normally inside a MiTimeline"
      },
      "parts": [
        "materin-ui-timeline-item__node",
        "materin-ui-timeline-item__body",
        "materin-ui-timeline-item__timestamp",
        "materin-ui-timeline-item__content"
      ],
      "variants": [
        "--success",
        "--warning",
        "--error",
        "--muted"
      ],
      "states": [],
      "batch": "E1-data"
    },
    {
      "name": "materin-ui-collapse-item",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/collapse-item/CollapseItem.vue",
      "purpose": {
        "zh": "折叠面板的单项（标题行 + 内容区），一般放在 MiCollapse 里用",
        "en": "A single collapse pane (title row plus content), normally inside a MiCollapse"
      },
      "parts": [
        "materin-ui-collapse-item__head",
        "materin-ui-collapse-item__title",
        "materin-ui-collapse-item__arrow",
        "materin-ui-collapse-item__content"
      ],
      "variants": [],
      "states": [
        "is-open"
      ],
      "batch": "E1-data"
    },
    {
      "name": "materin-ui-image",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/image/Image.vue",
      "purpose": {
        "zh": "图片：加载占位扫光、失败回落、四种裁剪、可懒加载",
        "en": "Image: loading shimmer, error fallback, four fits, optional lazy loading"
      },
      "parts": [
        "materin-ui-image__img",
        "materin-ui-image__placeholder",
        "materin-ui-image__fallback"
      ],
      "variants": [
        "--cover",
        "--contain",
        "--fill",
        "--none",
        "--rounded"
      ],
      "states": [
        "is-loaded"
      ],
      "batch": "E1-data"
    },
    {
      "name": "materin-ui-segmented",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/segmented/Segmented.vue",
      "purpose": {
        "zh": "分段控制：一组互斥选项，可撑满一行",
        "en": "Segmented: mutually exclusive options, optional full width"
      },
      "parts": [
        "materin-ui-segmented__option"
      ],
      "variants": [
        "--sm",
        "--block"
      ],
      "states": [
        "is-active"
      ],
      "batch": "E1-data"
    },
    {
      "name": "materin-ui-pagination",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/pagination/Pagination.vue",
      "purpose": {
        "zh": "分页：页码 + 省略号 + 上下页，受控可用",
        "en": "Pagination: pagers with ellipsis and prev and next, works controlled"
      },
      "parts": [
        "materin-ui-pagination__prev",
        "materin-ui-pagination__page",
        "materin-ui-pagination__next",
        "materin-ui-pagination__total"
      ],
      "variants": [
        "--sm"
      ],
      "states": [
        "is-active",
        "is-gap"
      ],
      "batch": "E1-data"
    },
    {
      "name": "materin-ui-timeline",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/timeline/Timeline.vue",
      "purpose": {
        "zh": "时间线：节点 + 时间戳 + 内容，节点可换色",
        "en": "Timeline: nodes with timestamps and content, colourable nodes"
      },
      "parts": [],
      "variants": [],
      "states": [],
      "batch": "E1-data"
    },
    {
      "name": "materin-ui-collapse",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/collapse/Collapse.vue",
      "purpose": {
        "zh": "折叠面板：多开或手风琴，受控可用",
        "en": "Collapse: multiple or accordion, works controlled or not"
      },
      "parts": [],
      "variants": [],
      "states": [],
      "batch": "E1-data"
    },
    {
      "name": "materin-ui-result",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/result/Result.vue",
      "purpose": {
        "zh": "结果页：成功/失败/警告/提示四种图标 + 标题 + 说明 + 操作区",
        "en": "Result: success, error, warning or info icon with title, copy and actions"
      },
      "parts": [
        "materin-ui-result__icon",
        "materin-ui-result__title",
        "materin-ui-result__description",
        "materin-ui-result__extra"
      ],
      "variants": [
        "--success",
        "--error",
        "--warning",
        "--info"
      ],
      "states": [],
      "batch": "E1-data"
    },
    {
      "name": "materin-ui-descriptions",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/descriptions/Descriptions.vue",
      "purpose": {
        "zh": "描述列表：标签-值成对展示，横竖两向、可带边框",
        "en": "Descriptions: label-value pairs, horizontal or vertical, optional borders"
      },
      "parts": [
        "materin-ui-descriptions__title",
        "materin-ui-descriptions__body",
        "materin-ui-descriptions__row",
        "materin-ui-descriptions__label",
        "materin-ui-descriptions__value"
      ],
      "variants": [
        "--vertical",
        "--bordered"
      ],
      "states": [],
      "batch": "E1-data"
    },
    {
      "name": "materin-ui-statistic",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/statistic/Statistic.vue",
      "purpose": {
        "zh": "统计数值：大数字 + 标题 + 前后缀，千分位与小数位可控",
        "en": "Statistic: a big number with title, prefix and suffix, grouping and precision"
      },
      "parts": [
        "materin-ui-statistic__title",
        "materin-ui-statistic__value",
        "materin-ui-statistic__prefix",
        "materin-ui-statistic__suffix",
        "materin-ui-statistic__number"
      ],
      "variants": [
        "--success",
        "--danger"
      ],
      "states": [],
      "batch": "E1-data"
    },
    {
      "name": "materin-ui-progress",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/progress/Progress.vue",
      "purpose": {
        "zh": "进度条：线性与环形两种，四种状态色，支持不确定进度",
        "en": "Progress: line or ring, four status colours, indeterminate mode"
      },
      "parts": [
        "materin-ui-progress__runway",
        "materin-ui-progress__bar",
        "materin-ui-progress__text",
        "materin-ui-progress__ring-runway",
        "materin-ui-progress__ring-bar",
        "materin-ui-progress__ring"
      ],
      "variants": [
        "--sm",
        "--lg",
        "--indeterminate"
      ],
      "states": [],
      "batch": "E1-data"
    },
    {
      "name": "materin-ui-notification__item",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/notification-item/NotificationItem.vue",
      "purpose": {
        "zh": "单条通知卡（标题 + 正文），一般不用手动引用",
        "en": "A single notification card (title plus body), rarely referenced directly"
      },
      "parts": [
        "materin-ui-notification__header",
        "materin-ui-notification__title",
        "materin-ui-notification__close",
        "materin-ui-notification__content"
      ],
      "variants": [
        "--info",
        "--success",
        "--warning",
        "--error"
      ],
      "states": [],
      "batch": "D2-feedback"
    },
    {
      "name": "materin-ui-message__item",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/message-item/MessageItem.vue",
      "purpose": {
        "zh": "单条提示卡（消息 / 通知共用样式），一般不用手动引用",
        "en": "A single toast card (shared by message and notification), rarely referenced directly"
      },
      "parts": [
        "materin-ui-message__icon",
        "materin-ui-message__text",
        "materin-ui-message__close"
      ],
      "variants": [
        "--info",
        "--success",
        "--warning",
        "--error"
      ],
      "states": [],
      "batch": "D2-feedback"
    },
    {
      "name": "materin-ui-notification",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/notification/NotificationHost.vue",
      "purpose": {
        "zh": "全局通知：右上角浮出的通知卡，带标题，可多条、定时关闭",
        "en": "Notification: titled cards floating in from a corner, stacking and auto-dismiss"
      },
      "parts": [
        "materin-ui-notification__item",
        "materin-ui-notification__header",
        "materin-ui-notification__title",
        "materin-ui-notification__close",
        "materin-ui-notification__content"
      ],
      "variants": [
        "--top-right",
        "--top-left",
        "--bottom-right",
        "--bottom-left"
      ],
      "states": [],
      "batch": "D2-feedback"
    },
    {
      "name": "materin-ui-message",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/message/MessageHost.vue",
      "purpose": {
        "zh": "全局消息：MiMessage.success(...) 一行调用，可多条堆叠、定时关闭",
        "en": "Message: one-line MiMessage.success(...) calls, stacking and auto-dismiss"
      },
      "parts": [
        "materin-ui-message__item",
        "materin-ui-message__icon",
        "materin-ui-message__text",
        "materin-ui-message__close"
      ],
      "variants": [],
      "states": [],
      "batch": "D2-feedback"
    },
    {
      "name": "materin-ui-tour",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/tour/Tour.vue",
      "purpose": {
        "zh": "漫游引导：按步骤高亮页面元素并给说明，可上一步/下一步/完成",
        "en": "Tour: highlights page elements step by step with copy, prev, next and finish"
      },
      "parts": [
        "materin-ui-tour__highlight",
        "materin-ui-tour__popper",
        "materin-ui-tour__header",
        "materin-ui-tour__title",
        "materin-ui-tour__close",
        "materin-ui-tour__body",
        "materin-ui-tour__footer",
        "materin-ui-tour__indicator",
        "materin-ui-tour__actions",
        "materin-ui-tour__prev",
        "materin-ui-tour__next"
      ],
      "variants": [
        "--top",
        "--bottom",
        "--left",
        "--right"
      ],
      "states": [],
      "batch": "D2-feedback"
    },
    {
      "name": "materin-ui-drawer",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/drawer/Drawer.vue",
      "purpose": {
        "zh": "抽屉：从四边滑出，可设宽高、可不要标题栏、可玻璃",
        "en": "Drawer: slides in from any of four sides, sizeable, header optional, glass optional"
      },
      "parts": [
        "materin-ui-drawer__overlay",
        "materin-ui-drawer__panel",
        "materin-ui-drawer__header",
        "materin-ui-drawer__title",
        "materin-ui-drawer__close",
        "materin-ui-drawer__body",
        "materin-ui-drawer__footer"
      ],
      "variants": [
        "--rtl",
        "--ltr",
        "--ttb",
        "--btt",
        "--glass"
      ],
      "states": [],
      "batch": "D2-feedback"
    },
    {
      "name": "materin-ui-dialog",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/dialog/Dialog.vue",
      "purpose": {
        "zh": "对话框：遮罩 + 面板，可居中/全屏/玻璃，点遮罩或 ESC 关闭，打开时锁滚动",
        "en": "Dialog: overlay plus panel, centred, fullscreen or glass, closes on overlay click or Escape, locks scrolling"
      },
      "parts": [
        "materin-ui-dialog__overlay",
        "materin-ui-dialog__panel",
        "materin-ui-dialog__header",
        "materin-ui-dialog__title",
        "materin-ui-dialog__close",
        "materin-ui-dialog__body",
        "materin-ui-dialog__footer"
      ],
      "variants": [
        "--center",
        "--fullscreen",
        "--glass"
      ],
      "states": [],
      "batch": "D2-feedback"
    },
    {
      "name": "materin-ui-popconfirm",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/popconfirm/Popconfirm.vue",
      "purpose": {
        "zh": "气泡确认：二次确认后再执行，确认按钮分常用与危险两种语气",
        "en": "Popconfirm: asks before acting, with a normal or a danger confirm button"
      },
      "parts": [
        "materin-ui-popconfirm__trigger",
        "materin-ui-popconfirm__popper",
        "materin-ui-popconfirm__head",
        "materin-ui-popconfirm__icon",
        "materin-ui-popconfirm__title",
        "materin-ui-popconfirm__actions",
        "materin-ui-popconfirm__cancel",
        "materin-ui-popconfirm__confirm"
      ],
      "variants": [
        "--top",
        "--bottom",
        "--left",
        "--right",
        "--danger"
      ],
      "states": [
        "is-open",
        "is-disabled"
      ],
      "batch": "D1-feedback"
    },
    {
      "name": "materin-ui-popover",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/popover/Popover.vue",
      "purpose": {
        "zh": "气泡卡片：可放交互内容，点击/悬浮/聚焦触发，点外部关闭",
        "en": "Popover: holds interactive content, opened by click, hover or focus, closes on outside click"
      },
      "parts": [
        "materin-ui-popover__trigger",
        "materin-ui-popover__popper",
        "materin-ui-popover__title",
        "materin-ui-popover__content"
      ],
      "variants": [
        "--top",
        "--bottom",
        "--left",
        "--right"
      ],
      "states": [
        "is-open",
        "is-disabled"
      ],
      "batch": "D1-feedback"
    },
    {
      "name": "materin-ui-tooltip",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/tooltip/Tooltip.vue",
      "purpose": {
        "zh": "文字提示：悬浮或聚焦出现，四个方向、可设出现与消失延迟",
        "en": "Tooltip: appears on hover or focus, four placements, configurable show and hide delays"
      },
      "parts": [
        "materin-ui-tooltip__popper"
      ],
      "variants": [
        "--top",
        "--bottom",
        "--left",
        "--right"
      ],
      "states": [
        "is-disabled"
      ],
      "batch": "D1-feedback"
    },
    {
      "name": "materin-ui-loading",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/loading/Loading.vue",
      "purpose": {
        "zh": "加载态：盖在内容上的遮罩，可全屏、可带文案、三档转圈大小",
        "en": "Loading: a mask over its content, optional fullscreen, optional text, three spinner sizes"
      },
      "parts": [
        "materin-ui-loading__mask",
        "materin-ui-loading__spinner",
        "materin-ui-loading__text"
      ],
      "variants": [
        "--sm",
        "--md",
        "--lg",
        "--fullscreen"
      ],
      "states": [],
      "batch": "D1-feedback"
    },
    {
      "name": "materin-ui-alert",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/alert/Alert.vue",
      "purpose": {
        "zh": "提示条：四种语义、标题与描述、可关闭、图标、居中、玻璃底",
        "en": "Alert: four semantic types, title and description, closable, icon, centred, glass background"
      },
      "parts": [
        "materin-ui-alert__icon",
        "materin-ui-alert__content",
        "materin-ui-alert__title",
        "materin-ui-alert__description",
        "materin-ui-alert__close"
      ],
      "variants": [
        "--info",
        "--success",
        "--warning",
        "--error",
        "--center",
        "--glass"
      ],
      "states": [],
      "batch": "D1-feedback"
    },
    {
      "name": "materin-ui-rate",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/rate/Rate.vue",
      "purpose": {
        "zh": "评分：悬停预览、点击选中、可再点取消，可显示文字",
        "en": "Rate: hover preview, click to pick, click again to clear, optional text"
      },
      "parts": [
        "materin-ui-rate__item",
        "materin-ui-rate__text"
      ],
      "variants": [],
      "states": [
        "is-disabled",
        "is-active"
      ],
      "batch": "C2-choice"
    },
    {
      "name": "materin-ui-slider",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/slider/Slider.vue",
      "purpose": {
        "zh": "滑块：拖动、点击轨道、键盘左右键；支持双滑块区间",
        "en": "Slider: drag, click the runway, arrow keys; supports a two-handle range"
      },
      "parts": [
        "materin-ui-slider__runway",
        "materin-ui-slider__bar",
        "materin-ui-slider__button",
        "materin-ui-slider__value"
      ],
      "variants": [],
      "states": [
        "is-disabled",
        "is-range",
        "is-dragging"
      ],
      "batch": "C2-choice"
    },
    {
      "name": "materin-ui-select-group",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/option-group/OptionGroup.vue",
      "purpose": {
        "zh": "下拉选项分组：给一组选项加标题",
        "en": "Option group: a titled block of options"
      },
      "parts": [
        "materin-ui-select-group__title"
      ],
      "variants": [],
      "states": [],
      "batch": "C2-choice"
    },
    {
      "name": "materin-ui-select-option",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/option/Option.vue",
      "purpose": {
        "zh": "下拉选项：向父级 Select 登记自己的值与文案",
        "en": "Select option: registers its value and label with the parent select"
      },
      "parts": [
        "materin-ui-select-option__label",
        "materin-ui-select-option__check"
      ],
      "variants": [
        "--entry"
      ],
      "states": [
        "is-selected",
        "is-disabled",
        "is-active"
      ],
      "batch": "C2-choice"
    },
    {
      "name": "materin-ui-select",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/select/Select.vue",
      "purpose": {
        "zh": "下拉选择：单选/多选（多选显示标签）、键盘上下与回车、点击外部关闭",
        "en": "Select: single or multiple (multiple shows tags), arrow-key and Enter navigation, closes on outside click"
      },
      "parts": [
        "materin-ui-select__trigger",
        "materin-ui-select__value",
        "materin-ui-select__tags",
        "materin-ui-select__arrow",
        "materin-ui-select__dropdown",
        "materin-ui-select__empty"
      ],
      "variants": [
        "--sm",
        "--md",
        "--lg"
      ],
      "states": [
        "is-open",
        "is-disabled",
        "is-error",
        "is-multiple"
      ],
      "batch": "C2-choice"
    },
    {
      "name": "materin-ui-radio-group",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/radio-group/RadioGroup.vue",
      "purpose": {
        "zh": "单选组：同一时刻只选一个，横竖排列",
        "en": "Radio group: one choice at a time, row or column layout"
      },
      "parts": [],
      "variants": [
        "--horizontal",
        "--vertical"
      ],
      "states": [],
      "batch": "C2-choice"
    },
    {
      "name": "materin-ui-radio",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/radio/Radio.vue",
      "purpose": {
        "zh": "单选框：单独使用或配合单选组",
        "en": "Radio: standalone or inside a group"
      },
      "parts": [
        "materin-ui-radio__input",
        "materin-ui-radio__dot",
        "materin-ui-radio__label"
      ],
      "variants": [
        "--sm",
        "--md",
        "--lg"
      ],
      "states": [
        "is-checked",
        "is-disabled"
      ],
      "batch": "C2-choice"
    },
    {
      "name": "materin-ui-checkbox-group",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/checkbox-group/CheckboxGroup.vue",
      "purpose": {
        "zh": "多选组：数组值、横竖排列，统一向子项下发禁用与尺寸",
        "en": "Checkbox group: array value, row or column layout, pushes disabled and size down to the items"
      },
      "parts": [],
      "variants": [
        "--horizontal",
        "--vertical"
      ],
      "states": [],
      "batch": "C2-choice"
    },
    {
      "name": "materin-ui-checkbox",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/checkbox/Checkbox.vue",
      "purpose": {
        "zh": "多选框：单独使用或配合多选组，跟随表单的尺寸与禁用",
        "en": "Checkbox: standalone or inside a group, inheriting size and disabled state from the form"
      },
      "parts": [
        "materin-ui-checkbox__input",
        "materin-ui-checkbox__box",
        "materin-ui-checkbox__label"
      ],
      "variants": [
        "--sm",
        "--md",
        "--lg"
      ],
      "states": [
        "is-checked",
        "is-disabled"
      ],
      "batch": "C2-choice"
    },
    {
      "name": "materin-ui-switch",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/switch/Switch.vue",
      "purpose": {
        "zh": "开关：布尔或自定义值、开关文案、加载态、三档尺寸",
        "en": "Switch: boolean or custom values, on/off text, loading state, three sizes"
      },
      "parts": [
        "materin-ui-switch__handle",
        "materin-ui-switch__label"
      ],
      "variants": [
        "--sm",
        "--md",
        "--lg"
      ],
      "states": [
        "is-checked",
        "is-disabled",
        "is-loading"
      ],
      "batch": "C1-form-core"
    },
    {
      "name": "materin-ui-input-number",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/input-number/InputNumber.vue",
      "purpose": {
        "zh": "数字输入：步进、上下限、精度、键盘上下键、加减按钮自动禁用",
        "en": "Number input: stepping, min and max, precision, arrow keys, buttons that disable themselves at the bounds"
      },
      "parts": [
        "materin-ui-input-number__inner",
        "materin-ui-input-number__input",
        "materin-ui-input-number__decrease",
        "materin-ui-input-number__increase"
      ],
      "variants": [
        "--sm",
        "--md",
        "--lg"
      ],
      "states": [
        "is-disabled",
        "is-error"
      ],
      "batch": "C1-form-core"
    },
    {
      "name": "materin-ui-form-item",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/form-item/FormItem.vue",
      "purpose": {
        "zh": "表单项：标签、必填星号、校验错误、说明文字，向子控件下发尺寸与禁用",
        "en": "Form item: label, required asterisk, validation error, hint, and size or disabled state pushed down to the control"
      },
      "parts": [
        "materin-ui-form-item__label",
        "materin-ui-form-item__required",
        "materin-ui-form-item__content",
        "materin-ui-form-item__error",
        "materin-ui-form-item__hint"
      ],
      "variants": [
        "--left",
        "--right",
        "--top"
      ],
      "states": [
        "is-error"
      ],
      "batch": "C1-form-core"
    },
    {
      "name": "materin-ui-form",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/form/Form.vue",
      "purpose": {
        "zh": "表单：统一校验（必填 / 类型 / 长度 / 区间 / 正则 / 自定义，支持 blur 与 change 触发）",
        "en": "Form: one validation pipeline (required, type, length, range, pattern, custom) with blur and change triggers"
      },
      "parts": [],
      "variants": [
        "--sm",
        "--md",
        "--lg",
        "--inline"
      ],
      "states": [],
      "batch": "C1-form-core"
    },
    {
      "name": "materin-ui-empty",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/empty/Empty.vue",
      "purpose": {
        "zh": "空状态：默认插画 + 说明 + 底部操作，可换图",
        "en": "Empty state: default illustration, description and bottom actions, image replaceable"
      },
      "parts": [
        "materin-ui-empty__image",
        "materin-ui-empty__description",
        "materin-ui-empty__bottom"
      ],
      "variants": [
        "--sm",
        "--md",
        "--lg"
      ],
      "states": [],
      "batch": "B-foundation"
    },
    {
      "name": "materin-ui-skeleton-item",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/skeleton-item/SkeletonItem.vue",
      "purpose": {
        "zh": "骨架块：文本 / 标题 / 段落 / 按钮 / 图片 / 圆形 / 矩形",
        "en": "Skeleton block: text, heading, paragraph, button, image, circle or rectangle"
      },
      "parts": [],
      "variants": [
        "--text",
        "--caption",
        "--h1",
        "--h3",
        "--h5",
        "--paragraph",
        "--button",
        "--image",
        "--circle",
        "--rect"
      ],
      "states": [],
      "batch": "B-foundation"
    },
    {
      "name": "materin-ui-skeleton",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/skeleton/Skeleton.vue",
      "purpose": {
        "zh": "骨架屏：加载中占位，非加载态渲染真实内容",
        "en": "Skeleton: placeholder while loading, real content when not"
      },
      "parts": [
        "materin-ui-skeleton__items"
      ],
      "variants": [
        "--animated"
      ],
      "states": [],
      "batch": "B-foundation"
    },
    {
      "name": "materin-ui-avatar",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/avatar/Avatar.vue",
      "purpose": {
        "zh": "头像：图片 / 文字 / 默认剪影，圆形或方形，三档尺寸",
        "en": "Avatar: image, text or default silhouette; circle or square; three sizes"
      },
      "parts": [
        "materin-ui-avatar__img",
        "materin-ui-avatar__text",
        "materin-ui-avatar__icon"
      ],
      "variants": [
        "--circle",
        "--square"
      ],
      "states": [],
      "batch": "B-foundation"
    },
    {
      "name": "materin-ui-badge",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/badge/Badge.vue",
      "purpose": {
        "zh": "角标：数字（超上限显示 99+）、小红点、五种语义色",
        "en": "Badge: numbers (99+ over the max), status dot, five semantic colours"
      },
      "parts": [
        "materin-ui-badge__content",
        "materin-ui-badge__value"
      ],
      "variants": [
        "--primary",
        "--success",
        "--warning",
        "--danger",
        "--info",
        "--dot",
        "--standalone"
      ],
      "states": [],
      "batch": "B-foundation"
    },
    {
      "name": "materin-ui-title",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/title/Title.vue",
      "purpose": {
        "zh": "标题：1–6 级（字号 + 标签同步），可套语义色",
        "en": "Heading: levels 1–6 (size and tag together), with semantic colours"
      },
      "parts": [],
      "variants": [
        "--1",
        "--2",
        "--3",
        "--4",
        "--5",
        "--6",
        "--default",
        "--primary",
        "--secondary",
        "--success",
        "--warning",
        "--danger",
        "--info"
      ],
      "states": [],
      "batch": "B-foundation"
    },
    {
      "name": "materin-ui-text",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/text/Text.vue",
      "purpose": {
        "zh": "正文文本：语义色、三档字号、加粗斜体、单行/多行省略",
        "en": "Body text: semantic colours, three sizes, bold or italic, single- or multi-line truncation"
      },
      "parts": [],
      "variants": [
        "--default",
        "--primary",
        "--secondary",
        "--success",
        "--warning",
        "--danger",
        "--info",
        "--sm",
        "--md",
        "--lg",
        "--strong",
        "--italic",
        "--truncated",
        "--line-clamp"
      ],
      "states": [],
      "batch": "B-foundation"
    },
    {
      "name": "materin-ui-link",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/link/Link.vue",
      "purpose": {
        "zh": "链接：七种语义色、可选下划线、禁用态、图标插槽",
        "en": "Link: seven semantic colours, optional underline, disabled state, icon slot"
      },
      "parts": [
        "materin-ui-link__icon",
        "materin-ui-link__content"
      ],
      "variants": [
        "--default",
        "--primary",
        "--secondary",
        "--success",
        "--warning",
        "--danger",
        "--info",
        "--underline",
        "--disabled"
      ],
      "states": [],
      "batch": "B-foundation"
    },
    {
      "name": "materin-ui-divider",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/divider/Divider.vue",
      "purpose": {
        "zh": "分割线：横竖、三种线型、文字位置",
        "en": "Divider: horizontal or vertical, three line styles, text position"
      },
      "parts": [
        "materin-ui-divider__text"
      ],
      "variants": [
        "--horizontal",
        "--vertical",
        "--solid",
        "--dashed",
        "--dotted",
        "--left",
        "--center",
        "--right"
      ],
      "states": [],
      "batch": "A-layout"
    },
    {
      "name": "materin-ui-space",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/space/Space.vue",
      "purpose": {
        "zh": "元素间距：横竖排列、自动换行、撑满",
        "en": "Spacing between elements: row or column, wrapping or full width"
      },
      "parts": [],
      "variants": [
        "--horizontal",
        "--vertical",
        "--wrap",
        "--fill"
      ],
      "states": [],
      "batch": "A-layout"
    },
    {
      "name": "materin-ui-col",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/col/Col.vue",
      "purpose": {
        "zh": "24 栅格列：span/offset/order + xs~xl 断点覆盖",
        "en": "24-column grid column: span / offset / order with xs–xl breakpoint overrides"
      },
      "parts": [],
      "variants": [],
      "states": [],
      "batch": "A-layout"
    },
    {
      "name": "materin-ui-row",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/row/Row.vue",
      "purpose": {
        "zh": "24 栅格行：下发列间距，负责主轴与交叉轴对齐",
        "en": "24-column grid row: hands the gutter down to columns and controls alignment"
      },
      "parts": [],
      "variants": [],
      "states": [],
      "batch": "A-layout"
    },
    {
      "name": "materin-ui-footer",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/footer/Footer.vue",
      "purpose": {
        "zh": "容器页脚",
        "en": "Container footer"
      },
      "parts": [],
      "variants": [],
      "states": [],
      "batch": "A-layout"
    },
    {
      "name": "materin-ui-main",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/main/Main.vue",
      "purpose": {
        "zh": "容器主区：占满剩余空间并独立滚动",
        "en": "Container main region: takes the remaining space and scrolls on its own"
      },
      "parts": [],
      "variants": [],
      "states": [],
      "batch": "A-layout"
    },
    {
      "name": "materin-ui-aside",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/aside/Aside.vue",
      "purpose": {
        "zh": "容器侧栏：可设宽度，挂载即让父容器转为横向",
        "en": "Container side panel: width configurable, switches its parent container to horizontal on mount"
      },
      "parts": [],
      "variants": [],
      "states": [],
      "batch": "A-layout"
    },
    {
      "name": "materin-ui-header",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/header/Header.vue",
      "purpose": {
        "zh": "容器顶栏：毛玻璃吸附、可设高度",
        "en": "Container top bar: frosted, height configurable"
      },
      "parts": [],
      "variants": [],
      "states": [],
      "batch": "A-layout"
    },
    {
      "name": "materin-ui-container",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/container/Container.vue",
      "purpose": {
        "zh": "页面级容器：横竖方向自动判定（有侧栏则横向）",
        "en": "Page-level container: direction resolved automatically (horizontal when an aside is present)"
      },
      "parts": [],
      "variants": [
        "--vertical",
        "--horizontal"
      ],
      "states": [],
      "batch": "A-layout"
    },
    {
      "name": "materin-docs-wrap",
      "scope": "docs",
      "repo": "materin-ui",
      "file": "docs/docs.scss",
      "purpose": {
        "zh": "文档站内容定宽居中",
        "en": "Centred content column for the docs site"
      },
      "parts": [],
      "variants": [],
      "states": []
    },
    {
      "name": "materin-docs-header",
      "scope": "docs",
      "repo": "materin-ui",
      "file": "docs/docs.scss",
      "purpose": {
        "zh": "文档站顶栏（毛玻璃吸附）",
        "en": "Docs top bar (sticky, frosted)"
      },
      "parts": [
        "materin-docs-header__inner"
      ],
      "variants": [],
      "states": []
    },
    {
      "name": "materin-docs-brand",
      "scope": "docs",
      "repo": "materin-ui",
      "file": "docs/docs.scss",
      "purpose": {
        "zh": "文档站品牌标识与版本徽标",
        "en": "Docs brand mark and version badge"
      },
      "parts": [
        "materin-docs-brand__name",
        "materin-docs-brand__version"
      ],
      "variants": [],
      "states": []
    },
    {
      "name": "materin-docs-nav",
      "scope": "docs",
      "repo": "materin-ui",
      "file": "docs/docs.scss",
      "purpose": {
        "zh": "文档站锚点导航",
        "en": "Docs anchor navigation"
      },
      "parts": [],
      "variants": [],
      "states": []
    },
    {
      "name": "materin-docs-toggle",
      "scope": "docs",
      "repo": "materin-ui",
      "file": "docs/docs.scss",
      "purpose": {
        "zh": "语言 / 主题切换按钮",
        "en": "Language and theme toggles"
      },
      "parts": [],
      "variants": [],
      "states": []
    },
    {
      "name": "materin-docs-hero",
      "scope": "docs",
      "repo": "materin-ui",
      "file": "docs/docs.scss",
      "purpose": {
        "zh": "文档站首屏（主张 + 主行动）",
        "en": "Docs hero (claim and primary action)"
      },
      "parts": [
        "materin-docs-hero__actions"
      ],
      "variants": [],
      "states": []
    },
    {
      "name": "materin-docs-section",
      "scope": "docs",
      "repo": "materin-ui",
      "file": "docs/docs.scss",
      "purpose": {
        "zh": "文档站分区（标题 + 说明）",
        "en": "Docs section (heading and description)"
      },
      "parts": [
        "materin-docs-section__head"
      ],
      "variants": [],
      "states": []
    },
    {
      "name": "materin-docs-code",
      "scope": "docs",
      "repo": "materin-ui",
      "file": "docs/docs.scss",
      "purpose": {
        "zh": "文档代码块",
        "en": "Docs code block"
      },
      "parts": [],
      "variants": [],
      "states": []
    },
    {
      "name": "materin-docs-demo",
      "scope": "docs",
      "repo": "materin-ui",
      "file": "docs/docs.scss",
      "purpose": {
        "zh": "组件演示台（承载真实组件）",
        "en": "Component demo stage (holds real components)"
      },
      "parts": [
        "materin-docs-demo__label",
        "materin-docs-demo__grid"
      ],
      "variants": [
        "--column"
      ],
      "states": []
    },
    {
      "name": "materin-docs-tokens",
      "scope": "docs",
      "repo": "materin-ui",
      "file": "docs/docs.scss",
      "purpose": {
        "zh": "令牌实时取值表",
        "en": "Live token value table"
      },
      "parts": [],
      "variants": [],
      "states": []
    },
    {
      "name": "materin-docs-swatch",
      "scope": "docs",
      "repo": "materin-ui",
      "file": "docs/docs.scss",
      "purpose": {
        "zh": "令牌色块（直接引用令牌）",
        "en": "Token swatch (references the token directly)"
      },
      "parts": [],
      "variants": [],
      "states": []
    },
    {
      "name": "materin-docs-footer",
      "scope": "docs",
      "repo": "materin-ui",
      "file": "docs/docs.scss",
      "purpose": {
        "zh": "文档站页脚",
        "en": "Docs footer"
      },
      "parts": [
        "materin-docs-footer__inner"
      ],
      "variants": [],
      "states": []
    },
    {
      "name": "materin-ui-btn",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/button/Button.vue",
      "purpose": {
        "zh": "按钮：4 种类型 × 3 种尺寸 × loading/block",
        "en": "Button: 4 types x 3 sizes, plus loading and block"
      },
      "parts": [
        "materin-ui-btn__content",
        "materin-ui-btn__icon"
      ],
      "variants": [
        "--primary",
        "--secondary",
        "--ghost",
        "--danger",
        "--sm",
        "--lg",
        "--block",
        "--loading",
        "--disabled"
      ],
      "states": [
        "is-loading"
      ]
    },
    {
      "name": "materin-ui-field",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/input/Input.vue",
      "purpose": {
        "zh": "输入框：label / hint / error / clearable / prefix-suffix 插槽",
        "en": "Input: label, hint, error, clearable, prefix and suffix slots"
      },
      "parts": [
        "materin-ui-field__label",
        "materin-ui-field__required",
        "materin-ui-field__inner",
        "materin-ui-field__inner--has-prefix",
        "materin-ui-field__inner--has-suffix",
        "materin-ui-field__prefix",
        "materin-ui-field__suffix",
        "materin-ui-field__clear",
        "materin-ui-field__msg",
        "materin-ui-field__msg--error"
      ],
      "variants": [
        "--sm",
        "--md",
        "--lg",
        "--disabled",
        "--invalid"
      ],
      "states": [
        "is-focused"
      ]
    },
    {
      "name": "materin-ui-field-wrapper",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/input/Input.vue",
      "purpose": {
        "zh": "输入框外层容器（承载聚焦描边，与 input 本体分离）",
        "en": "Input wrapper (carries the focus ring, separate from the input itself)"
      },
      "parts": [],
      "variants": [
        "--focused"
      ],
      "states": []
    },
    {
      "name": "materin-ui-tag",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/tag/Tag.vue",
      "purpose": {
        "zh": "标签：6 种语义色 × 3 种尺寸 × closable",
        "en": "Tag: 6 semantic colours x 3 sizes, closable"
      },
      "parts": [
        "materin-ui-tag__icon",
        "materin-ui-tag__label",
        "materin-ui-tag__close"
      ],
      "variants": [
        "--primary",
        "--secondary",
        "--ok",
        "--warn",
        "--error",
        "--neutral",
        "--sm",
        "--lg",
        "--closable",
        "--disabled"
      ],
      "states": []
    },
    {
      "name": "materin-ui-card",
      "scope": "ui",
      "repo": "materin-ui",
      "file": "packages/components/card/Card.vue",
      "purpose": {
        "zh": "卡片：default / glass / hero 三种外观 × hoverable",
        "en": "Card: default, glass and hero variants, plus hoverable"
      },
      "parts": [
        "materin-ui-card__cover",
        "materin-ui-card__header",
        "materin-ui-card__title",
        "materin-ui-card__subtitle",
        "materin-ui-card__body",
        "materin-ui-card__footer"
      ],
      "variants": [
        "--glass",
        "--hero",
        "--hoverable"
      ],
      "states": []
    },
    {
      "name": "materin-site-header",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "顶部导航栏，滚动吸附，毛玻璃压在内容之上",
        "en": "Top navigation bar, sticky on scroll, frosted glass over content"
      },
      "parts": [
        "materin-site-header__inner"
      ],
      "states": []
    },
    {
      "name": "materin-site-brand",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "品牌标识（图标 + 名称），始终回首页",
        "en": "Brand mark (icon + name), always links home"
      },
      "parts": [
        "materin-site-brand__name"
      ],
      "states": []
    },
    {
      "name": "materin-site-nav",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "站内导航链接组；当前页用 is-active",
        "en": "In-site navigation links; current page uses is-active"
      },
      "parts": [],
      "states": [
        "is-active"
      ]
    },
    {
      "name": "materin-site-lang-toggle",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "中英切换按钮（data-lang 由 JS 写入 html 元素）",
        "en": "Bilingual toggle (JS writes data-lang on the html element)"
      },
      "parts": [],
      "states": []
    },
    {
      "name": "materin-site-theme-toggle",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "明暗主题切换按钮（data-theme 由 JS 写入 html 元素）",
        "en": "Light/dark toggle (JS writes data-theme on the html element)"
      },
      "parts": [],
      "states": []
    },
    {
      "name": "materin-site-hero",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "首屏：主张 + 副文 + CTA + 数字条",
        "en": "Hero: claim, lede, CTA, stat strip"
      },
      "parts": [
        "materin-site-hero__eyebrow",
        "materin-site-hero__lede",
        "materin-site-hero__cta",
        "materin-site-hero__stats"
      ],
      "states": []
    },
    {
      "name": "materin-site-btn",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "站内动作按钮（不用于把访客送出站）",
        "en": "In-site action button (never used to send a visitor off-site)"
      },
      "parts": [],
      "variants": [
        "--primary",
        "--small"
      ],
      "states": [
        "is-active"
      ]
    },
    {
      "name": "materin-site-btn-row",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "按钮行容器（把并列动作排成一行）",
        "en": "Button row container (a line of parallel actions)"
      },
      "parts": [],
      "states": []
    },
    {
      "name": "materin-site-section",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "内容分区；--alt 为变色底 + 描边",
        "en": "Content section; --alt tints the background and adds edges"
      },
      "parts": [
        "materin-site-section__head"
      ],
      "variants": [
        "--alt"
      ],
      "states": []
    },
    {
      "name": "materin-site-card",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "内容条目卡片（项目、说明、索引共用），毛玻璃 + 高光边",
        "en": "Content card (projects, docs, index) with frosted glass and a specular edge"
      },
      "parts": [
        "materin-site-card__meta"
      ],
      "states": []
    },
    {
      "name": "materin-site-tags",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "标签组容器",
        "en": "Tag group container"
      },
      "parts": [],
      "states": []
    },
    {
      "name": "materin-site-tag",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "单个标签（分类、观察对象）",
        "en": "Single tag (category, subject)"
      },
      "parts": [],
      "states": []
    },
    {
      "name": "materin-site-pill",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "徽标：版本号、状态；--neutral 为弱化样式",
        "en": "Badge: version, status; --neutral is the muted style"
      },
      "parts": [],
      "variants": [
        "--neutral"
      ],
      "states": []
    },
    {
      "name": "materin-site-filters",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "筛选按钮容器",
        "en": "Filter button container"
      },
      "parts": [],
      "states": []
    },
    {
      "name": "materin-site-chip",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "筛选胶囊；选中用 aria-pressed=\"true\"（首选）或 is-active",
        "en": "Filter chip; selected via aria-pressed=\"true\" (preferred) or is-active"
      },
      "parts": [],
      "states": [
        "is-active"
      ]
    },
    {
      "name": "materin-site-note",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "提示条：补充说明，左侧强调色竖线",
        "en": "Callout: supplementary note with an accent bar on the left"
      },
      "parts": [],
      "states": []
    },
    {
      "name": "materin-site-code",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "代码块（命令、片段），高不透明保证可读",
        "en": "Code block (commands, snippets) with high opacity for readability"
      },
      "parts": [],
      "states": []
    },
    {
      "name": "materin-site-doc",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "文档型页面外壳（关于 / 设计 / 项目说明页）",
        "en": "Documentation page shell (about / UI spec / project pages)"
      },
      "parts": [
        "materin-site-doc__head",
        "materin-site-doc__sub",
        "materin-site-doc-nav"
      ],
      "states": []
    },
    {
      "name": "materin-site-prose",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "长文中排版：标题、列表、表格、引用、代码",
        "en": "Long-form typography: headings, lists, tables, quotes, code"
      },
      "parts": [],
      "states": []
    },
    {
      "name": "materin-site-crumb",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "面包屑导航",
        "en": "Breadcrumb navigation"
      },
      "parts": [],
      "states": []
    },
    {
      "name": "materin-site-principle",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "规范页的原则条目（小标题 + 说明）",
        "en": "Principle entry on spec pages (heading + description)"
      },
      "parts": [],
      "states": []
    },
    {
      "name": "materin-site-ticks",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "要点列表",
        "en": "Bullet list of key points"
      },
      "parts": [],
      "states": []
    },
    {
      "name": "materin-site-footer",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "页脚，毛玻璃浅底",
        "en": "Footer with a subtle glass tint"
      },
      "parts": [
        "materin-site-footer__inner"
      ],
      "states": []
    },
    {
      "name": "materin-site-loading",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "内容加载中的占位文字（索引页拉 JSON 时）",
        "en": "Loading placeholder text (while the index page fetches JSON)"
      },
      "parts": [],
      "states": []
    },
    {
      "name": "materin-site-empty",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "空态文字（筛选无结果时）",
        "en": "Empty-state text (when a filter matches nothing)"
      },
      "parts": [],
      "states": []
    },
    {
      "name": "materin-ui-swatch",
      "scope": "ui",
      "repo": "materin-tech.github.io",
      "file": "assets/css/site.css",
      "purpose": {
        "zh": "规范页色块：直接引用令牌，所以色块即真实取值",
        "en": "Spec-page swatch: references the token directly, so the swatch is the real value"
      },
      "parts": [],
      "states": []
    },
    {
      "name": "materin-site-assets-list",
      "scope": "site",
      "repo": "materin-tech.github.io",
      "file": "assets/css/site.css",
      "purpose": {
        "zh": "资源清单表（文件、地址、说明三列）",
        "en": "Asset list table (file, URL, description)"
      },
      "parts": [],
      "states": []
    },
    {
      "name": "materin-u-wrap",
      "scope": "u",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "内容定宽居中",
        "en": "Centred content column"
      },
      "parts": [],
      "states": []
    },
    {
      "name": "materin-u-grid",
      "scope": "u",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "自适应卡片网格",
        "en": "Responsive card grid"
      },
      "parts": [],
      "states": []
    },
    {
      "name": "materin-u-two-col",
      "scope": "u",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "两列自适应布局",
        "en": "Two-column responsive layout"
      },
      "parts": [],
      "states": []
    },
    {
      "name": "materin-u-muted",
      "scope": "u",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "次要文字色",
        "en": "Muted text colour"
      },
      "parts": [],
      "states": []
    },
    {
      "name": "materin-u-mono",
      "scope": "u",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "等宽文字（令牌名、选择器）",
        "en": "Monospace text (token names, selectors)"
      },
      "parts": [],
      "states": []
    },
    {
      "name": "materin-u-skip",
      "scope": "u",
      "repo": "materin-tech.github.io",
      "file": "assets/css/style.css",
      "purpose": {
        "zh": "跳到主内容（无障碍），聚焦才出现",
        "en": "Skip to content (a11y), visible only on focus"
      },
      "parts": [],
      "states": []
    },
    {
      "name": "materin-learn-header",
      "scope": "learn",
      "repo": "materin-tech.github.io",
      "file": "learn/assets/learn.css",
      "purpose": {
        "zh": "AI 原生学习路线子站：页头、每日页、动效舞台、讲解区、路线图",
        "en": "AI-native learning subsite: header, day page, anim stage, sections, roadmap"
      },
      "parts": [
        "materin-learn-action",
        "materin-learn-action__h",
        "materin-learn-action__p",
        "materin-learn-atlas",
        "materin-learn-atlas__band",
        "materin-learn-atlas__band--learn",
        "materin-learn-atlas__band--read",
        "materin-learn-atlas__band--use",
        "materin-learn-atlas__edge",
        "materin-learn-atlas__edge--bridge",
        "materin-learn-atlas__field",
        "materin-learn-atlas__legend",
        "materin-learn-atlas__legend-dot",
        "materin-learn-atlas__legend-item",
        "materin-learn-atlas__legend-item--bridge",
        "materin-learn-atlas__legend-item--learn",
        "materin-learn-atlas__legend-item--read",
        "materin-learn-atlas__legend-item--use",
        "materin-learn-atlas__node",
        "materin-learn-atlas__node--learn",
        "materin-learn-atlas__node--read",
        "materin-learn-atlas__node--use",
        "materin-learn-atlas__node-d",
        "materin-learn-atlas__node-name",
        "materin-learn-atlas__note",
        "materin-learn-attn",
        "materin-learn-attn__bar",
        "materin-learn-attn__col",
        "materin-learn-attn__note",
        "materin-learn-attn__q",
        "materin-learn-attn__readout",
        "materin-learn-attn__rows",
        "materin-learn-attn__score",
        "materin-learn-attn__token",
        "materin-learn-attn__token--q",
        "materin-learn-attn__tokens",
        "materin-learn-attn__track",
        "materin-learn-attn__val",
        "materin-learn-batch",
        "materin-learn-batch__cell",
        "materin-learn-batch__cell--live",
        "materin-learn-batch__cell--queue",
        "materin-learn-batch__grid",
        "materin-learn-batch__lane",
        "materin-learn-batch__lane--idle",
        "materin-learn-batch__lane--run",
        "materin-learn-batch__lane-tag",
        "materin-learn-batch__lanes",
        "materin-learn-batch__note",
        "materin-learn-batch__readout",
        "materin-learn-batch__stat",
        "materin-learn-batch__stat-cap",
        "materin-learn-batch__stat-num",
        "materin-learn-bench",
        "materin-learn-bench__bar",
        "materin-learn-bench__name",
        "materin-learn-bench__note",
        "materin-learn-bench__num",
        "materin-learn-bench__rank",
        "materin-learn-bench__readout",
        "materin-learn-bench__row",
        "materin-learn-bench__rows",
        "materin-learn-bench__stat",
        "materin-learn-bench__stat-cap",
        "materin-learn-bench__stat-num",
        "materin-learn-bench__tag",
        "materin-learn-bench__track",
        "materin-learn-bench__verdict",
        "materin-learn-body-day",
        "materin-learn-body-slide",
        "materin-learn-brand",
        "materin-learn-brand__name",
        "materin-learn-brand__tag",
        "materin-learn-callout",
        "materin-learn-callout--example",
        "materin-learn-callout--misconception",
        "materin-learn-callout__h",
        "materin-learn-callout__p",
        "materin-learn-content",
        "materin-learn-content__body",
        "materin-learn-content__h",
        "materin-learn-content__head",
        "materin-learn-content__no",
        "materin-learn-content__p",
        "materin-learn-content__text",
        "materin-learn-counter",
        "materin-learn-counter__chip",
        "materin-learn-counter__chip--en",
        "materin-learn-counter__chips",
        "materin-learn-counter__count",
        "materin-learn-counter__label",
        "materin-learn-counter__note",
        "materin-learn-counter__num",
        "materin-learn-counter__swap",
        "materin-learn-cover",
        "materin-learn-cover__chip",
        "materin-learn-cover__chips",
        "materin-learn-cover__kicker",
        "materin-learn-cover__sub",
        "materin-learn-cover__title",
        "materin-learn-dayhead",
        "materin-learn-dayhead__meta",
        "materin-learn-dayhead__sub",
        "materin-learn-dayhead__title",
        "materin-learn-descent",
        "materin-learn-descent__axis",
        "materin-learn-descent__ball",
        "materin-learn-descent__curve",
        "materin-learn-descent__epoch",
        "materin-learn-descent__field",
        "materin-learn-descent__loss",
        "materin-learn-descent__loss-tag",
        "materin-learn-descent__note",
        "materin-learn-descent__plot",
        "materin-learn-descent__readout",
        "materin-learn-distill",
        "materin-learn-distill__bar",
        "materin-learn-distill__bars",
        "materin-learn-distill__note",
        "materin-learn-distill__num",
        "materin-learn-distill__panel",
        "materin-learn-distill__q",
        "materin-learn-distill__readout",
        "materin-learn-distill__row",
        "materin-learn-distill__row--dark",
        "materin-learn-distill__track",
        "materin-learn-distill__who",
        "materin-learn-distill__word",
        "materin-learn-duel",
        "materin-learn-duel__bar",
        "materin-learn-duel__card",
        "materin-learn-duel__card--a",
        "materin-learn-duel__card--b",
        "materin-learn-duel__meter",
        "materin-learn-duel__meter-label",
        "materin-learn-duel__note",
        "materin-learn-duel__num",
        "materin-learn-duel__prompt",
        "materin-learn-duel__round",
        "materin-learn-duel__round-no",
        "materin-learn-duel__rounds",
        "materin-learn-duel__track",
        "materin-learn-end",
        "materin-learn-end__hint",
        "materin-learn-end__kicker",
        "materin-learn-end__next",
        "materin-learn-end__takeaway",
        "materin-learn-fab",
        "materin-learn-fab__card",
        "materin-learn-fab__label",
        "materin-learn-fab__mark",
        "materin-learn-fab__note",
        "materin-learn-fab__q",
        "materin-learn-fab__question",
        "materin-learn-fab__round",
        "materin-learn-fab__round--art",
        "materin-learn-fab__round--fab",
        "materin-learn-fab__round--ok",
        "materin-learn-fab__rounds",
        "materin-learn-fab__row",
        "materin-learn-fim",
        "materin-learn-fim__cell",
        "materin-learn-fim__cell--middle",
        "materin-learn-fim__cell--prefix",
        "materin-learn-fim__cell--suffix",
        "materin-learn-fim__cursor",
        "materin-learn-fim__note",
        "materin-learn-fim__readout",
        "materin-learn-fim__row",
        "materin-learn-fim__row--middle",
        "materin-learn-fim__row--prefix",
        "materin-learn-fim__row--suffix",
        "materin-learn-fim__stat",
        "materin-learn-fim__stat-cap",
        "materin-learn-fim__stat-num",
        "materin-learn-fim__tag",
        "materin-learn-flow",
        "materin-learn-flow__cell",
        "materin-learn-flow__cells",
        "materin-learn-flow__note",
        "materin-learn-flow__num",
        "materin-learn-flow__row",
        "materin-learn-flow__row--base",
        "materin-learn-flow__row--clean",
        "materin-learn-flow__rows",
        "materin-learn-flow__tag",
        "materin-learn-footer",
        "materin-learn-header__inner",
        "materin-learn-header__nav",
        "materin-learn-kv",
        "materin-learn-kv__cached",
        "materin-learn-kv__cached-label",
        "materin-learn-kv__cell",
        "materin-learn-kv__cell--gen",
        "materin-learn-kv__cell--prompt",
        "materin-learn-kv__note",
        "materin-learn-kv__readout",
        "materin-learn-kv__redo",
        "materin-learn-kv__redo-label",
        "materin-learn-kv__redo-num",
        "materin-learn-kv__row",
        "materin-learn-kv__row--gen",
        "materin-learn-kv__row--prompt",
        "materin-learn-kv__step",
        "materin-learn-kv__tag",
        "materin-learn-lang",
        "materin-learn-loop",
        "materin-learn-loop__cache",
        "materin-learn-loop__cell",
        "materin-learn-loop__cell--gen",
        "materin-learn-loop__cell--prompt",
        "materin-learn-loop__lap",
        "materin-learn-loop__lap-label",
        "materin-learn-loop__note",
        "materin-learn-loop__readout",
        "materin-learn-loop__row",
        "materin-learn-loop__row--gen",
        "materin-learn-loop__row--prompt",
        "materin-learn-loop__step",
        "materin-learn-loop__steps",
        "materin-learn-loop__tag",
        "materin-learn-lora",
        "materin-learn-lora__cell",
        "materin-learn-lora__cell--frozen",
        "materin-learn-lora__cell--train",
        "materin-learn-lora__lane",
        "materin-learn-lora__mini",
        "materin-learn-lora__mini--a",
        "materin-learn-lora__mini--b",
        "materin-learn-lora__note",
        "materin-learn-lora__patch",
        "materin-learn-lora__patch-tag",
        "materin-learn-lora__pct",
        "materin-learn-lora__pct-label",
        "materin-learn-lora__readout",
        "materin-learn-lora__wall",
        "materin-learn-lora__wall-tag",
        "materin-learn-main",
        "materin-learn-map",
        "materin-learn-map__day",
        "materin-learn-map__day-no",
        "materin-learn-map__day-title",
        "materin-learn-map__more",
        "materin-learn-map__stage",
        "materin-learn-map__stage-days",
        "materin-learn-map__stage-h",
        "materin-learn-map__stage-name",
        "materin-learn-map__stage-no",
        "materin-learn-map__stage-p",
        "materin-learn-moe",
        "materin-learn-moe__lane",
        "materin-learn-moe__lane-fill",
        "materin-learn-moe__lane-meter",
        "materin-learn-moe__lane-no",
        "materin-learn-moe__lane-score",
        "materin-learn-moe__lanes",
        "materin-learn-moe__note",
        "materin-learn-moe__readout",
        "materin-learn-moe__stat",
        "materin-learn-moe__stat-cap",
        "materin-learn-moe__stat-num",
        "materin-learn-moe__tag",
        "materin-learn-moe__token",
        "materin-learn-moe__tokens",
        "materin-learn-pager",
        "materin-learn-pill",
        "materin-learn-pill--stage",
        "materin-learn-progress",
        "materin-learn-progress__bar",
        "materin-learn-progress__label",
        "materin-learn-progress__num",
        "materin-learn-progress__track",
        "materin-learn-quant",
        "materin-learn-quant__cell",
        "materin-learn-quant__cells",
        "materin-learn-quant__gb",
        "materin-learn-quant__gb-label",
        "materin-learn-quant__gb-tag",
        "materin-learn-quant__note",
        "materin-learn-quant__q",
        "materin-learn-quant__readout",
        "materin-learn-quant__row",
        "materin-learn-quant__row--fp16",
        "materin-learn-quant__row--int4",
        "materin-learn-quant__row--int8",
        "materin-learn-quant__rows",
        "materin-learn-quant__tag",
        "materin-learn-quote",
        "materin-learn-recipe",
        "materin-learn-recipe__cell",
        "materin-learn-recipe__cell--code",
        "materin-learn-recipe__cell--math",
        "materin-learn-recipe__cell--web",
        "materin-learn-recipe__cell--zh",
        "materin-learn-recipe__cells",
        "materin-learn-recipe__note",
        "materin-learn-recipe__out",
        "materin-learn-recipe__readout",
        "materin-learn-recipe__row",
        "materin-learn-recipe__rows",
        "materin-learn-recipe__stat",
        "materin-learn-recipe__stat-cap",
        "materin-learn-recipe__stat-num",
        "materin-learn-recipe__tag",
        "materin-learn-scale",
        "materin-learn-scale__axis-x",
        "materin-learn-scale__axis-y",
        "materin-learn-scale__budget",
        "materin-learn-scale__cell",
        "materin-learn-scale__cell--data",
        "materin-learn-scale__cell--param",
        "materin-learn-scale__cells",
        "materin-learn-scale__curve",
        "materin-learn-scale__d",
        "materin-learn-scale__head",
        "materin-learn-scale__line",
        "materin-learn-scale__mark",
        "materin-learn-scale__mark--c",
        "materin-learn-scale__mark--o",
        "materin-learn-scale__mark--u",
        "materin-learn-scale__mark-dot",
        "materin-learn-scale__mark-loss",
        "materin-learn-scale__mark-name",
        "materin-learn-scale__n",
        "materin-learn-scale__note",
        "materin-learn-scale__ratio",
        "materin-learn-scale__readout",
        "materin-learn-scale__row",
        "materin-learn-scale__row--chinchilla",
        "materin-learn-scale__rows",
        "materin-learn-scale__stat",
        "materin-learn-scale__stat-cap",
        "materin-learn-scale__stat-num",
        "materin-learn-scale__stats",
        "materin-learn-scale__tag",
        "materin-learn-scale__track",
        "materin-learn-section",
        "materin-learn-section__deep",
        "materin-learn-section__h",
        "materin-learn-section__p",
        "materin-learn-sections",
        "materin-learn-sim",
        "materin-learn-sim__dot",
        "materin-learn-sim__field",
        "materin-learn-sim__link",
        "materin-learn-sim__note",
        "materin-learn-sim__pair",
        "materin-learn-sim__readout",
        "materin-learn-sim__score",
        "materin-learn-slide",
        "materin-learn-slide-nav",
        "materin-learn-slide-nav__btn",
        "materin-learn-slide-nav__dot",
        "materin-learn-slide-nav__dots",
        "materin-learn-slide-page",
        "materin-learn-slide__brand",
        "materin-learn-slide__page",
        "materin-learn-spec",
        "materin-learn-spec__cell",
        "materin-learn-spec__cell--draft",
        "materin-learn-spec__cell--fix",
        "materin-learn-spec__cell--slot",
        "materin-learn-spec__note",
        "materin-learn-spec__readout",
        "materin-learn-spec__row",
        "materin-learn-spec__row--draft",
        "materin-learn-spec__row--verify",
        "materin-learn-spec__slot",
        "materin-learn-spec__stat",
        "materin-learn-spec__stat-cap",
        "materin-learn-spec__stat-num",
        "materin-learn-spec__tag",
        "materin-learn-spec__tag--verify",
        "materin-learn-spec__verdict",
        "materin-learn-spectrum",
        "materin-learn-spectrum__bar",
        "materin-learn-spectrum__bars",
        "materin-learn-spectrum__dial",
        "materin-learn-spectrum__note",
        "materin-learn-spectrum__phrase",
        "materin-learn-spectrum__row",
        "materin-learn-spectrum__track",
        "materin-learn-spectrum__val",
        "materin-learn-spectrum__word",
        "materin-learn-stage",
        "materin-learn-stage__hook",
        "materin-learn-takeaway",
        "materin-learn-takeaway__h",
        "materin-learn-takeaway__p",
        "materin-learn-think",
        "materin-learn-think__cell",
        "materin-learn-think__cell--ans",
        "materin-learn-think__cell--bad",
        "materin-learn-think__cell--draft",
        "materin-learn-think__cell--fast",
        "materin-learn-think__note",
        "materin-learn-think__question",
        "materin-learn-think__readout",
        "materin-learn-think__row",
        "materin-learn-think__row--fast",
        "materin-learn-think__row--think",
        "materin-learn-think__stat",
        "materin-learn-think__stat-cap",
        "materin-learn-think__stat-num",
        "materin-learn-think__tag",
        "materin-learn-think__tag--think",
        "materin-learn-think__verdict",
        "materin-learn-think__verdict--bad",
        "materin-learn-think__verdict--good",
        "materin-learn-today",
        "materin-learn-today__go",
        "materin-learn-today__kicker",
        "materin-learn-today__title",
        "materin-learn-tool",
        "materin-learn-tool__cell",
        "materin-learn-tool__cell--ans",
        "materin-learn-tool__cell--call",
        "materin-learn-tool__cell--world",
        "materin-learn-tool__note",
        "materin-learn-tool__question",
        "materin-learn-tool__readout",
        "materin-learn-tool__row",
        "materin-learn-tool__row--ans",
        "materin-learn-tool__row--call",
        "materin-learn-tool__row--world",
        "materin-learn-tool__stat",
        "materin-learn-tool__stat-cap",
        "materin-learn-tool__stat-num",
        "materin-learn-tool__tag",
        "materin-learn-tool__tag--world",
        "materin-learn-tool__verdict",
        "materin-learn-viz",
        "materin-learn-viz__bar",
        "materin-learn-viz__bar--en",
        "materin-learn-viz__bar-row",
        "materin-learn-viz__bar-row--wide",
        "materin-learn-viz__bar-tag",
        "materin-learn-viz__bar-track",
        "materin-learn-viz__bar-val",
        "materin-learn-viz__bars",
        "materin-learn-viz__bars--wide",
        "materin-learn-viz__chip",
        "materin-learn-viz__chip--alt",
        "materin-learn-viz__chip--merged",
        "materin-learn-viz__chips",
        "materin-learn-viz__label",
        "materin-learn-viz__num",
        "materin-learn-viz__num-label",
        "materin-learn-viz__route-dot",
        "materin-learn-viz__route-dots",
        "materin-learn-viz__route-row",
        "materin-learn-viz__route-row--think",
        "materin-learn-viz__route-word",
        "materin-learn-viz__route-word--ok",
        "materin-learn-viz__routes",
        "materin-learn-winfill",
        "materin-learn-winfill__cell",
        "materin-learn-winfill__cell--doc",
        "materin-learn-winfill__cell--free",
        "materin-learn-winfill__cell--hist",
        "materin-learn-winfill__cell--reply",
        "materin-learn-winfill__cell--sys",
        "materin-learn-winfill__cut-cell",
        "materin-learn-winfill__cut-label",
        "materin-learn-winfill__cutrow",
        "materin-learn-winfill__grid",
        "materin-learn-winfill__legend",
        "materin-learn-winfill__legend-item",
        "materin-learn-winfill__legend-item--doc",
        "materin-learn-winfill__legend-item--hist",
        "materin-learn-winfill__legend-item--reply",
        "materin-learn-winfill__legend-item--sys",
        "materin-learn-winfill__note",
        "materin-learn-winfill__readout",
        "materin-learn-winfill__turn",
        "materin-learn-winfill__turn-no"
      ],
      "states": [
        "is-active",
        "is-climbed",
        "is-current",
        "is-done",
        "is-flat",
        "is-in",
        "is-live",
        "is-picked",
        "is-rejected",
        "is-revealed",
        "is-second",
        "is-stage",
        "is-struck",
        "is-top"
      ],
      "batch": "learn"
    }
  ],
  "docs_site": {
    "repo": "materin-ui",
    "source": "docs/",
    "build": "npm run docs:build → docs-dist/",
    "url": "https://materin-tech.github.io/materin-ui/"
  }
}