// Common Part Components
import Panel from './parts/Panel.vue';
import SubPanel from './parts/SubPanel.vue';
import CodeEditor from './parts/CodeEditor.vue';
import Dialog from './parts/Dialog.vue';
import Tabs from './parts/Tabs.vue';
import DataItem from './parts/DataItem.vue';
import ListPanel from './parts/ListPanel.vue';
import useCore from './hooks/useCore';

// Renderers
import EngineRenderer from './renderer/EngineRenderer';
import SetterRenderer from './renderer/SetterRenderer';

// Widgets
import Empty from './widgets/Empty.vue';
import Logo from './widgets/Logo.vue';
import Designer from './widgets/Designer.vue';
import Components from './widgets/Components.vue';
import Files from './widgets/Files.vue';
import Outline from './widgets/Outline.vue';
import Properties from './widgets/Properties.vue';
import Styles from './widgets/Styles.vue';
import Events from './widgets/Events.vue';
import Actions from './widgets/Actions.vue';
import Toolbar from './widgets/Toolbar.vue';
import Directives from './widgets/Directives.vue';
import Schema from './widgets/Scheam.vue';
import Templates from './widgets/Templates.vue';
import ProjectSwitcher from './widgets/ProjectSwitcher.vue';

// Setters
import InputSetter from './setters/InputSetter.vue';
import SelectSetter from './setters/SelectSetter.vue';
import ExpressionSetter from './setters/ExpressionSetter.vue';
import JSONSetter from './setters/JSONSetter.vue';
import FunctionSetter from './setters/FunctionSetter.vue';
import BooleanSetter from './setters/BooleanSetter.vue';
import ColorSetter from './setters/ColorSetter.vue';
import NumberSetter from './setters/NumberSetter.vue';

export const buildInWidgets: Record<string, any> = {
  Empty,
  Logo,
  Designer,
  Components,
  Files,
  Outline,
  Properties,
  Styles,
  Events,
  Actions,
  Toolbar,
  Directives,
  Schema,
  Templates,
  ProjectSwitcher
};

export const buildInSetters: Record<string, any> = {
  InputSetter,
  SelectSetter,
  ExpressionSetter,
  JSONSetter,
  FunctionSetter,
  BooleanSetter,
  ColorSetter,
  NumberSetter
};

export const SetterValueTypes: Record<string, string[]> = {
  string: ['InputSetter', 'SelectSetter'],
  number: ['NumberSetter'],
  boolean: ['BooleanSetter'],
  object: ['JSONSetter'],
  function: ['FunctionSetter'],
  array: ['JSONSetter'],
  JSFunction: ['FunctionSetter'],
  JSExpression: ['ExpressionSetter']
};

export {
  EngineRenderer,
  SetterRenderer,
  Panel,
  Dialog,
  Tabs,
  ListPanel,
  SubPanel,
  DataItem,
  CodeEditor,
  useCore
};
