import type { App } from 'vue'
import Icon from './components/Icon/Icon.vue'
import Button from './canonical/ButtonBridge.vue'
import Radio from './canonical/Radio.vue'
import Switch from './canonical/Switch.vue'
import InputBoxLine from './canonical/InputBoxLine.vue'
import InputBoxFilled from './canonical/InputBoxFilled.vue'
import Badge from './canonical/Badge.vue'
import Breadcrumb from './canonical/Breadcrumb.vue'
import BreadcrumbItem from './canonical/BreadcrumbItem.vue'
import CheckBox from './canonical/CheckBox.vue'
import FormItem from './canonical/FormItem.vue'
import InputNumber from './canonical/InputNumber.vue'
import Notification from './canonical/Notification.vue'
import PromptMessage from './canonical/PromptMessage.vue'
import Pagination from './canonical/Pagination.vue'
import Chart from './canonical/Chart.vue'
import Progress from './canonical/Progress.vue'
import Rating from './canonical/Rating.vue'
import SelectBoxLine from './canonical/SelectBoxLine.vue'
import SelectBoxFilled from './canonical/SelectBoxFilled.vue'
import Slider from './canonical/Slider.vue'
import Steps from './canonical/Steps.vue'
import StepItem from './canonical/StepItem.vue'
import Table from './canonical/Table.vue'
import Tab from './canonical/Tab.vue'
import TabItem from './canonical/TabItem.vue'
import TabList from './canonical/TabList.vue'
import TopBar from './canonical/TopBar.vue'
import DropDownListSelect from './canonical/DropDownListSelect.vue'
import Tooltip from './canonical/Tooltip.vue'
import PillStatus from './canonical/PillStatus.vue'
import PillCounter from './canonical/PillCounter.vue'
import PopupBoxCanonical from './canonical/PopupBox.vue'
import {
  open as popupBoxOpen,
  alert as popupBoxAlert,
  confirm as popupBoxConfirm,
} from './components/PopupBox/popupbox-service'

const PopupBox = Object.assign(PopupBoxCanonical, {
  open: popupBoxOpen,
  alert: popupBoxAlert,
  confirm: popupBoxConfirm,
})

export {
  Button,
  Badge,
  Breadcrumb,
  BreadcrumbItem,
  InputBoxLine,
  InputBoxFilled,
  CheckBox,
  FormItem,
  InputNumber,
  Notification,
  PopupBox,
  PromptMessage,
  Pagination,
  Chart,
  Progress,
  Radio,
  Rating,
  Slider,
  Switch,
  Table,
  TopBar,
  SelectBoxLine,
  SelectBoxFilled,
  DropDownListSelect,
  StepItem,
  Steps,
  Tab,
  TabItem,
  TabList,
  Tooltip,
  PillStatus,
  PillCounter,
  Icon,
}
export type {
  PopupBoxHandle,
  PopupBoxOptions,
  PopupBoxResult,
} from './components/PopupBox/popupbox-service'
export {
  IconAdd,
  IconMinus,
  IconArrowDropdown,
  IconSelected,
  LogoTVU,
  LogoTS,
  iconManifest,
  iconCategoryRegistry,
  iconNameAliases,
  iconRegistry,
  resolveIcon,
  listIconsByCategory,
} from './icons/index'
export type { IconCategory, IconDefinition, IconCategoryRegistry } from './icons/index'

export default {
  install(app: App) {
    app.component('InputBoxLine', InputBoxLine)
    app.component('InputBoxFilled', InputBoxFilled)
    app.component('Button', Button)
    app.component('Badge', Badge)
    app.component('Breadcrumb', Breadcrumb)
    app.component('BreadcrumbItem', BreadcrumbItem)
    app.component('CheckBox', CheckBox)
    app.component('FormItem', FormItem)
    app.component('InputNumber', InputNumber)
    app.component('Icon', Icon)
    app.component('Notification', Notification)
    app.component('PopupBox', PopupBox)
    app.component('PromptMessage', PromptMessage)
    app.component('Pagination', Pagination)
    app.component('Chart', Chart)
    app.component('Progress', Progress)
    app.component('Radio', Radio)
    app.component('Rating', Rating)
    app.component('Slider', Slider)
    app.component('Switch', Switch)
    app.component('Table', Table)
    app.component('TopBar', TopBar)
    app.component('SelectBoxLine', SelectBoxLine)
    app.component('SelectBoxFilled', SelectBoxFilled)
    app.component('DropDownListSelect', DropDownListSelect)
    app.component('StepItem', StepItem)
    app.component('Steps', Steps)
    app.component('Tab', Tab)
    app.component('TabItem', TabItem)
    app.component('TabList', TabList)
    app.component('Tooltip', Tooltip)
    app.component('PillStatus', PillStatus)
    app.component('PillCounter', PillCounter)
  },
}
