# OpenSpec-lite: 模块清单（可逐步补全）
# 目的：让 AI 在“选模块”阶段就能定位入口与主要依赖。

modules:
  - id: boot
    name: 应用入口与初始化
    type: core
    entrypoints:
      - src/main.ts
      - library/index.ts
    keywords:
      - createApp
      - setupVab
      - setupI18n
      - setupStore
      - setupRouter

  - id: setup-vab
    name: setupVab（library/index.ts 自动加载/图标/样式/插件）
    type: core
    entrypoints:
      - library/index.ts
      - library/plugins/
      - library/styles/
      - src/icon/index.ts
    keywords:
      - require.context
      - VabIcon
      - createHead

  - id: router
    name: 路由与权限
    type: core
    entrypoints:
      - src/router/index.ts
      - src/router/permissions.ts
    keywords:
      - constantRoutes
      - asyncRoutes
      - meta

  - id: store
    name: Pinia 状态
    type: core
    entrypoints:
      - src/store/index.ts
      - src/store/modules
    keywords:
      - createPinia

  - id: store-settings
    name: Settings Store（主题/布局等全局配置）
    type: store
    entrypoints:
      - src/store/modules/settings.ts
      - library/styles/variables/
    keywords:
      - updateTheme
      - themeName
      - menuWidth

  - id: store-routes
    name: Routes Store（路由拦截/菜单路由设置）
    type: store
    entrypoints:
      - src/store/modules/routes.ts
    keywords:
      - setRoutes
      - resetRouter

  - id: store-user
    name: User Store（登录/用户信息/登出）
    type: store
    entrypoints:
      - src/store/modules/user.ts
    keywords:
      - getUserInfo
      - resetAll

  - id: store-tabs
    name: Tabs Store（visitedRoutes）
    type: store
    entrypoints:
      - src/store/modules/tabs.ts
    keywords:
      - visitedRoutes
      - noClosable

  - id: store-errorlog
    name: ErrorLog Store（错误日志收集）
    type: store
    entrypoints:
      - src/store/modules/errorLog.ts
    keywords:
      - addErrorLog

  - id: i18n
    name: 国际化
    type: core
    entrypoints:
      - src/i18n/index.ts
    keywords:
      - createI18n
      - translate

  - id: api-system
    name: API 层（src/api + request 封装）
    type: core
    entrypoints:
      - src/api/
      - src/utils/request.ts
    keywords:
      - axios
      - interceptors
      - refreshToken

  - id: config-system
    name: 配置系统（src/config 聚合）
    type: core
    entrypoints:
      - src/config/index.js
      - src/config
    keywords:
      - cli.config
      - theme.config
      - net.config

  - id: access-control
    name: 访问控制（ACL + hasPermission + v-permissions）
    type: core
    entrypoints:
      - src/store/modules/acl.ts
      - src/utils/permission.ts
      - library/plugins/directive.ts
    keywords:
      - hasPermission
      - v-permissions

  - id: mock
    name: 本地 Mock
    type: tooling
    entrypoints:
      - mock/index.js
      - mock/controller
    keywords:
      - setupMiddlewares
      - mockjs
      - responseFake

  - id: icons
    name: SVG Icons（src/icon）
    type: ui
    entrypoints:
      - src/icon/index.ts
      - src/icon
    keywords:
      - require.context
      - svg

  - id: styles
    name: 样式体系（library/styles）
    type: ui
    entrypoints:
      - library/styles/vab.scss
      - library/styles/variables
      - library/styles/background
    keywords:
      - scss
      - variables

  - id: ui-components
    name: Vab 组件库
    type: ui
    entrypoints:
      - library/components/
    keywords:
      - Vab
      - ElementPlus

  - id: vab-app
    name: VabApp
    type: ui
    entrypoints:
      - library/components/VabApp/

  - id: vab-app-main
    name: VabAppMain
    type: ui
    entrypoints:
      - library/components/VabAppMain/

  - id: vab-avatar
    name: VabAvatar
    type: ui
    entrypoints:
      - library/components/VabAvatar/

  - id: vab-breadcrumb
    name: VabBreadcrumb
    type: ui
    entrypoints:
      - library/components/VabBreadcrumb/

  - id: vab-card
    name: VabCard
    type: ui
    entrypoints:
      - library/components/VabCard/

  - id: vab-colorful-card
    name: VabColorfulCard
    type: ui
    entrypoints:
      - library/components/VabColorfulCard/

  - id: vab-column-bar
    name: VabColumnBar
    type: ui
    entrypoints:
      - library/components/VabColumnBar/

  - id: vab-fold
    name: VabFold
    type: ui
    entrypoints:
      - library/components/VabFold/

  - id: vab-footer
    name: VabFooter
    type: ui
    entrypoints:
      - library/components/VabFooter/

  - id: vab-full-screen
    name: VabFullScreen
    type: ui
    entrypoints:
      - library/components/VabFullScreen/

  - id: vab-language
    name: VabLanguage
    type: ui
    entrypoints:
      - library/components/VabLanguage/

  - id: vab-link
    name: VabLink
    type: ui
    entrypoints:
      - library/components/VabLink/

  - id: vab-logo
    name: VabLogo
    type: ui
    entrypoints:
      - library/components/VabLogo/

  - id: vab-router-view
    name: VabRouterView
    type: ui
    entrypoints:
      - library/components/VabRouterView/

  - id: vab-query-form
    name: VabQueryForm
    type: ui
    entrypoints:
      - library/components/VabQueryForm/

  - id: vab-error-log
    name: VabErrorLog
    type: ui
    entrypoints:
      - library/components/VabErrorLog/

  - id: vab-menu
    name: VabMenu
    type: ui
    entrypoints:
      - library/components/VabMenu/

  - id: vab-nav
    name: VabNav
    type: ui
    entrypoints:
      - library/components/VabNav/

  - id: vab-tabs
    name: VabTabs
    type: ui
    entrypoints:
      - library/components/VabTabs/

  - id: vab-refresh
    name: VabRefresh
    type: ui
    entrypoints:
      - library/components/VabRefresh/

  - id: vab-search
    name: VabSearch
    type: ui
    entrypoints:
      - library/components/VabSearch/

  - id: vab-lock
    name: VabLock
    type: ui
    entrypoints:
      - library/components/VabLock/

  - id: vab-notice
    name: VabNotice
    type: ui
    entrypoints:
      - library/components/VabNotice/

  - id: vab-header
    name: VabHeader
    type: ui
    entrypoints:
      - library/components/VabHeader/

  - id: vab-sidebar
    name: VabSideBar
    type: ui
    entrypoints:
      - library/components/VabSideBar/

  - id: layouts
    name: 布局体系
    type: ui
    entrypoints:
      - library/layouts/index.vue
      - library/layouts/
    keywords:
      - Layout

  - id: vab-theme
    name: Theme 系统（VabTheme）
    type: ui
    entrypoints:
      - library/components/VabTheme/
      - src/store/modules/settings.ts
      - library/plugins/vab.ts
    keywords:
      - theme
      - updateTheme
      - $pub

  - id: plugins
    name: Plugins（全局注入/指令/错误处理）
    type: core
    entrypoints:
      - library/plugins/
    keywords:
      - app.use
      - globalProperties

  - id: plugin-vab
    name: plugin-vab（gp + mitt 事件总线）
    type: plugin
    entrypoints:
      - library/plugins/vab.ts
    keywords:
      - $pub
      - $sub
      - mitt

  - id: plugin-directive
    name: plugin-directive（v-permissions）
    type: plugin
    entrypoints:
      - library/plugins/directive.ts
    keywords:
      - v-permissions
      - hasPermission

  - id: plugin-errorlog
    name: plugin-errorlog（全局错误捕获）
    type: plugin
    entrypoints:
      - library/plugins/errorLog.ts
    keywords:
      - errorHandler
      - useErrorLogStore

  - id: plugin-support
    name: plugin-support（构建信息/依赖检查）
    type: plugin
    entrypoints:
      - library/plugins/support.ts
    keywords:
      - __APP_INFO__

  - id: build
    name: 构建扩展
    type: tooling
    entrypoints:
      - vue.config.js
      - library/build
    keywords:
      - chainWebpack
      - createVuePlugin

  - id: plop
    name: Plop 代码生成器
    type: tooling
    entrypoints:
      - plopfile.js
      - plop-templates/
    keywords:
      - plop
      - setGenerator
