import type { App } from 'vue';

import ContextMenu from '@/directives//context-menu';
import Focus from '@/directives//focus';
import Tooltip from '@/directives//tooltip';
import ClickOutside from '@/directives/click-outside';

import TransitionBounce from '@/components/transition/bounce.vue';
import TransitionDialog from '@/components/transition/dialog.vue';
import TransitionExpand from '@/components/transition/expand.vue';
import VAvatar from '@/components/v-avatar.vue';
import VBadge from '@/components/v-badge.vue';
import VBreadcrumb from '@/components/v-breadcrumb.vue';
import VButton from '@/components/v-button.vue';
import VCardActions from '@/components/v-card-actions.vue';
import VCardSubtitle from '@/components/v-card-subtitle.vue';
import VCardText from '@/components/v-card-text.vue';
import VCardTitle from '@/components/v-card-title.vue';
import VCard from '@/components/v-card.vue';
import VCheckboxTree from '@/components/v-checkbox-tree/v-checkbox-tree.vue';
import VCheckbox from '@/components/v-checkbox.vue';
import VChip from '@/components/v-chip.vue';
import VDivider from '@/components/v-divider.vue';
import VEmojiPicker from '@/components/v-emoji-picker.vue';
import VFancySelect from '@/components/v-fancy-select.vue';
import VHighlight from '@/components/v-highlight.vue';
import VHover from '@/components/v-hover.vue';
import VIconFile from '@/components/v-icon-file.vue';
import VIcon from '@/components/v-icon/v-icon.vue';
import VInfo from '@/components/v-info.vue';
import VInput from '@/components/v-input.vue';
import VItemGroup from '@/components/v-item-group.vue';
import VItem from '@/components/v-item.vue';
import VListGroup from '@/components/v-list-group.vue';
import VListItemContent from '@/components/v-list-item-content.vue';
import VListItemHint from '@/components/v-list-item-hint.vue';
import VListItemIcon from '@/components/v-list-item-icon.vue';
import VListItem from '@/components/v-list-item.vue';
import VList from '@/components/v-list.vue';
import VMenu from '@/components/v-menu.vue';
import VNotice from '@/components/v-notice.vue';
import VOverlay from '@/components/v-overlay.vue';
import VPagination from '@/components/v-pagination.vue';
import VProgressCircular from '@/components/v-progress-circular.vue';
import VProgressLinear from '@/components/v-progress-linear.vue';
import VRadio from '@/components/v-radio.vue';
import VSelect from '@/components/v-select/v-select.vue';
import VSheet from '@/components/v-sheet.vue';
import VSkeletonLoader from '@/components/v-skeleton-loader.vue';
import VSlider from '@/components/v-slider.vue';
import VTabItem from '@/components/v-tab-item.vue';
import VTab from '@/components/v-tab.vue';
import VTabsItems from '@/components/v-tabs-items.vue';
import VTabs from '@/components/v-tabs.vue';
import VTemplateInput from '@/components/v-template-input.vue';
import VTextOverflow from '@/components/v-text-overflow.vue';
import VTextarea from '@/components/v-textarea.vue';
import VWorkspaceTile from '@/components/v-workspace-tile.vue';
import VWorkspace from '@/components/v-workspace.vue';

export function register(app: App): void {
	app.directive('context-menu', ContextMenu);
	app.directive('focus', Focus);
	app.directive('tooltip', Tooltip);
	app.directive('click-outside', ClickOutside);

	app.component('TransitionBounce', TransitionBounce);
	app.component('TransitionDialog', TransitionDialog);
	app.component('TransitionExpand', TransitionExpand);
	app.component('VAvatar', VAvatar);
	app.component('VBadge', VBadge);
	app.component('VBreadcrumb', VBreadcrumb);
	app.component('VButton', VButton);
	app.component('VCard', VCard);
	app.component('VCardActions', VCardActions);
	app.component('VCardSubtitle', VCardSubtitle);
	app.component('VCardText', VCardText);
	app.component('VCardTitle', VCardTitle);
	app.component('VCheckbox', VCheckbox);
	app.component('VCheckboxTree', VCheckboxTree);
	app.component('VChip', VChip);
	app.component('VDivider', VDivider);
	app.component('VEmojiPicker', VEmojiPicker);
	app.component('VFancySelect', VFancySelect);
	app.component('VHighlight', VHighlight);
	app.component('VHover', VHover);
	app.component('VIcon', VIcon);
	app.component('VIconFile', VIconFile);
	app.component('VInfo', VInfo);
	app.component('VInput', VInput);
	app.component('VItem', VItem);
	app.component('VItemGroup', VItemGroup);
	app.component('VList', VList);
	app.component('VListGroup', VListGroup);
	app.component('VListItem', VListItem);
	app.component('VListItemContent', VListItemContent);
	app.component('VListItemHint', VListItemHint);
	app.component('VListItemIcon', VListItemIcon);
	app.component('VMenu', VMenu);
	app.component('VNotice', VNotice);
	app.component('VOverlay', VOverlay);
	app.component('VPagination', VPagination);
	app.component('VProgressCircular', VProgressCircular);
	app.component('VProgressLinear', VProgressLinear);
	app.component('VRadio', VRadio);
	app.component('VSelect', VSelect);
	app.component('VSheet', VSheet);
	app.component('VSkeletonLoader', VSkeletonLoader);
	app.component('VSlider', VSlider);
	app.component('VTab', VTab);
	app.component('VTabItem', VTabItem);
	app.component('VTabs', VTabs);
	app.component('VTabsItems', VTabsItems);
	app.component('VTemplateInput', VTemplateInput);
	app.component('VTextOverflow', VTextOverflow);
	app.component('VTextarea', VTextarea);
	app.component('VWorkspaceTile', VWorkspaceTile);
	app.component('VWorkspace', VWorkspace);
}
