import { createApp } from 'vue'
import App from './App.vue'
// reset style sheet
import '@/styles/reset.scss'
// CSS common style sheet
import '@/styles/common.scss'
// iconfont css
import '@/assets/iconfont/iconfont.scss'
// font css
import '@/assets/fonts/font.scss'
// element css
import 'element-plus/dist/index.css'
// element dark css
import 'element-plus/theme-chalk/dark/css-vars.css'
// custom element dark css
import '@/styles/element-dark.scss'
// custom element css
import '@/styles/element.scss'
// svg icons
import 'virtual:svg-icons-register'
// element plus
import ElementPlus from 'element-plus'
// element icons
import * as Icons from '@element-plus/icons-vue'
// custom directives
import directives from '@/directives/index'
// vue Router
import router from '@/routers'
// vue i18n
import I18n from '@/languages/index'
// pinia store
import pinia from '@/stores'
// errorHandler
import errorHandler from '@/utils/errorHandler'

import SvgIcon from '@/components/SvgIcon/index.vue'

// 字典标签组件
import DictTag from '@/components/DictTag/index.vue'

import { useDict } from '@/utils/dict'
const app = createApp(App)

// 全局方法挂载
app.config.globalProperties.useDict = useDict

// 全局组件挂载
app.component('DictTag', DictTag)
app.config.errorHandler = errorHandler

// register the element Icons component
Object.keys(Icons).forEach(key => {
  app.component(key, Icons[key as keyof typeof Icons])
})
// eslint-disable-next-line vue/component-definition-name-casing
app.component('svg-icon', SvgIcon)

app.use(ElementPlus).use(directives).use(router).use(I18n).use(pinia).mount('#app')
