/* eslint-disable import/order */
import React from 'react';

import { Epilot } from './Epilot';
import { Edit } from './Edit';
import { OpenInNew } from './OpenInNew';
import { Share } from './Share';
import { Delete } from './Delete';
import { Add } from './Add';
import { AddCircle } from './AddCircle';
import { Purpose } from './Purpose';
import { Check } from './Check';
import { CheckCircle } from './CheckCircle';
import { Warning } from './Warning';
import { Error } from './Error';
import { Info } from './Info';
import { Help } from './Help';
import { ContentCopy } from './ContentCopy';
import { FileCopy } from './FileCopy';
import { FileCopyOff } from './FileCopyOff';
import { FilterAlt } from './FilterAlt';
import { FilterAltOff } from './FilterAltOff';
import { DataObject } from './DataObject';
import { Notifications } from './Notifications';
import { Visibility } from './Visibility';
import { VisibilityOff } from './VisibilityOff';
import { Close } from './Close';
import { ExpandMore } from './ExpandMore';
import { ExpandLess } from './ExpandLess';
import { ChevronRight } from './ChevronRight';
import { ChevronLeft } from './ChevronLeft';
import { Search } from './Search';
import { Settings } from './Settings';
import { Calendar } from './Calendar';
import { CalendarToday } from './CalendarToday';
import { Explore } from './Explore';
import { DragIndicator } from './DragIndicator';
import { Download } from './Download';
import { Save } from './Save';
import { Refresh } from './Refresh';
import { Menu } from './Menu';
import { Link } from './Link';
import { AddLink } from './AddLink';
import { Login } from './Login';
import { Logout } from './Logout';
import { Lock } from './Lock';
import { LockOpen } from './LockOpen';
import { Table } from './Table';
import { TableEdit } from './TableEdit';
import { Attributes } from './Attributes';
import { ArrowRight } from './ArrowRight';
import { ArrowLeft } from './ArrowLeft';
import { Dashboard } from './Dashboard';
import { Opportunity } from './Opportunity';
import { Order } from './Order';
import { Contact } from './Contact';
import { Account } from './Account';
import { Contract } from './Contract';
import { BillingAccount } from './BillingAccount';
import { Request } from './Request';
import { Message } from './Message';
import { Thread } from './Thread';
import { MarkMessageUnread } from './MarkMessageUnread';
import { MarkNoteUnread } from './MarkNoteUnread';
import { MarkNoteRead } from './MarkNoteRead';
import { MarkMessageRead } from './MarkMessageRead';
import { MoveToInbox } from './MoveToInbox';
import { File } from './File';
import { EmailTemplate } from './EmailTemplate';
import { FileShared } from './FileShared';
import { Note } from './Note';
import { Document } from './Document';
import { Templates } from './Templates';
import { Product } from './Product';
import { Price } from './Price';
import { Tax } from './Tax';
import { Submission } from './Submission';
import { Partner } from './Partner';
import { Partnering } from './Partnering';
import { Meter } from './Meter';
import { Entity } from './Entity';
import { Webhook } from './Webhook';
import { Design } from './Design';
import { Workflow } from './Workflow';
import { Blueprint } from './Blueprint';
import { Phase } from './Phase';
import { Automation } from './Automation';
import { AutomationCircle } from './AutomationCircle';
import { Journey } from './Journey';
import { Relations } from './Relations';
import { Availability } from './Availability';
import { Filter } from './Filter';
import { Sort } from './Sort';
import { Desktop } from './Desktop';
import { Phone } from './Phone';
import { Image } from './Image';
import { Pause } from './Pause';
import { Play } from './Play';
import { Alarm } from './Alarm';
import { ArrowCircleLeft } from './ArrowCircleLeft';
import { MoreVert } from './MoreVert';
import { MoreHoriz } from './MoreHoriz';
import { MoreHorizCircle } from './MoreHorizCircle';
import { QuestionMark } from './QuestionMark';
import { Skip } from './Skip';
import { Checklist } from './Checklist';
import { PersonCheck } from './PersonCheck';
import { PersonAdd } from './PersonAdd';
import { Comment } from './Comment';
import { Star } from './Star';
import { Store } from './Store';
import { Exclamation } from './Exclamation';
import { Primary } from './Primary';
import { PriceMapping } from './PriceMapping';
import { Reply } from './Reply';
import { ReplyAll } from './ReplyAll';
import { Resize } from './Resize';
import { Portal } from './Portal';
import { ThumbUp } from './ThumbUp';
import { ThumbDown } from './ThumbDown';
import { EntityBuilder } from './EntityBuilder';
import { Connection } from './Connection';
import { CheckBox } from './CheckBox';
import { Number } from './Number';
import { RadioButton } from './RadioButton';
import { TextField } from './TextField';
import { Address } from './Address';
import { Signature } from './Signature';
import { Upload } from './Upload';
import { Calculator } from './Calculator';
import { Payment } from './Payment';
import { Consent } from './Consent';
import { Paragraph } from './Paragraph';
import { Action } from './Action';
import { AttributeEdit } from './AttributeEdit';
import { Summary } from './Summary';
import { Solar } from './Solar';
import { SDK } from './SDK';
import { Lookup } from './Lookup';
import { PreviousProvider } from './PreviousProvider';
import { SuccessConfirmation } from './SuccessConfirmation';
import { Category } from './Category';
import { ExpandContent } from './ExpandContent';
import { CollapseContent } from './CollapseContent';
import { Map } from './Map';
import { Sun } from './Sun';
import { Frame } from './Frame';
import { EnergySavingsLeaf } from './EnergySavingsLeaf';
import { AvgTime } from './AvgTime';
import { Call } from './Call';
import { Mail } from './Mail';
import { Cable } from './Cable';
import { Stack } from './Stack';
import { TwoColumns } from './TwoColumns';
import { Diagram } from './Diagram';
import { Repeat } from './Repeat';
import { MoveDown } from './MoveDown';
import { StepOver } from './StepOver';
import { Pending } from './Pending';
import { PauseCircle } from './PauseCircle';
import { Condition } from './Condition';
import { ConditionCircle } from './ConditionCircle';
import { NoteStack } from './NoteStack';
import { DoubleThumbsUp } from './DoubleThumbsUp';
import { AIStar } from './AIStar';
import { AICompose } from './AICompose';
import { Label } from './Label';
import { LabelOff } from './LabelOff';
import { Remove } from './Remove';
import { FileManager } from './FileManager';
import { Bolt } from './Bolt';
import { ViewDay } from './ViewDay';
import { Flip } from './Flip';
import { Update } from './Update';
import { Schedule } from './Schedule';
import { CalendarClock } from './CalendarClock';
import { ReadMore } from './ReadMore';
import { Keep } from './Keep';
import { KeepOff } from './KeepOff';
import { Grid } from './Grid';
import { GridView } from './GridView';
import { AutoDelete } from './AutoDelete';
import { DeleteForever } from './DeleteForever';
import { Restore } from './Restore';
import { Forest } from './Forest';
import { Fuel } from './Fuel';
import { Recycling } from './Recycling';
import { Dangerous } from './Dangerous';
import { Apartment } from './Apartment';
import { PlayCircle } from './PlayCircle';
import { AddTask } from './AddTask';
import { Raven } from './Raven';
import { DriveFileMove } from './DriveFileMove';
import { Merge } from './Merge';
import { Archive } from './Archive';
import { Unarchive } from './Unarchive';
import { LocationAway } from './LocationAway';
import { LinkOff } from './LinkOff';
import { AccountCircleOff } from './AccountCircleOff';
import { Send } from './Send';
import { Undo } from './Undo';
import { ChipExtraction } from './ChipExtraction';
import { Target } from './Target';
import { Campaign } from './Campaign';
import { Ticket } from './Ticket';
import { Flow } from './Flow';
import { Cards } from './Cards';
import { Task } from './Task';
import { Widgets } from './Widgets';
import { Attach } from './Attach';
import { Description } from './Description';
import { StackedEmail } from './StackedEmail';
import { ChatBubble } from './ChatBubble';
import { Globe } from './Globe';
import { Home } from './Home';
import { Euro } from './Euro';
import { Toggle } from './Toggle';
import { Numbers } from './Numbers';
import { Building } from './Building';
import { Move } from './Move';
import { MoveIn } from './MoveIn';
import { ConditionGraph } from './ConditionGraph';
import { FeatureSearch } from './FeatureSearch';
import { Synchronize } from './Synchronize';
import { ArrowUp } from './ArrowUp';
import { ArrowDown } from './ArrowDown';
import { RegularExpression } from './RegularExpression';
import { Inbox } from './Inbox';
import { EditDocument } from './EditDocument';
import { LeftPanelClose } from './LeftPanelClose';
import { LeftPanelOpen } from './LeftPanelOpen';
import { Hand } from './Hand';
import { SmartToy } from './SmartToy';
import { AdminPanelSettings } from './AdminPanelSettings';
import { Sync } from './Sync';
import { SyncDisabled } from './SyncDisabled';
import { DoNotDisturbOn } from './DoNotDisturbOn';
import { Swap } from './Swap';
import { Expand } from './Expand';
import { Collapse } from './Collapse';
import { ActionKey } from './ActionKey';
import { BarChart } from './BarChart';
import { Database } from './Database';
import { Coupon } from './Coupon';
import { ProductRecommendation } from './ProductRecommendation';
import { Location } from './Location';
import { Labs } from './Labs';
import { FormatBold } from './FormatBold';
import { FormatItalic } from './FormatItalic';
import { FormatUnderlined } from './FormatUnderlined';
import { FormatStrikethrough } from './FormatStrikethrough';
import { Heading } from './Heading';
import { FormatListBulleted } from './FormatListBulleted';
import { FormatListNumbered } from './FormatListNumbered';
import { Code } from './Code';
import { Group } from './Group';
import { FolderLimited } from './FolderLimited';
import { Analytics } from './Analytics';
import { AreaChart } from './AreaChart';
import { Trending } from './Trending';
import { Library } from './Library';
import { ChartLine } from './ChartLine';

import type { IconPropsReact } from './types';

export const IconComponentsMap = {
  epilot: Epilot,
  edit: Edit,
  open_in_new: OpenInNew,
  share: Share,
  delete: Delete,
  add: Add,
  add_circle: AddCircle,
  purpose: Purpose,
  check: Check,
  check_circle: CheckCircle,
  warning: Warning,
  error: Error,
  info: Info,
  help: Help,
  content_copy: ContentCopy,
  file_copy: FileCopy,
  file_copy_off: FileCopyOff,
  filter_alt: FilterAlt,
  filter_alt_off: FilterAltOff,
  data_object: DataObject,
  notifications: Notifications,
  visibility: Visibility,
  visibility_off: VisibilityOff,
  close: Close,
  expand_more: ExpandMore,
  expand_less: ExpandLess,
  chevron_right: ChevronRight,
  chevron_left: ChevronLeft,
  search: Search,
  settings: Settings,
  calendar: Calendar,
  calendar_today: CalendarToday,
  explore: Explore,
  drag_indicator: DragIndicator,
  download: Download,
  save: Save,
  refresh: Refresh,
  menu: Menu,
  link: Link,
  add_link: AddLink,
  login: Login,
  logout: Logout,
  lock: Lock,
  lock_open: LockOpen,
  table: Table,
  table_edit: TableEdit,
  attributes: Attributes,
  arrow_right: ArrowRight,
  arrow_left: ArrowLeft,
  dashboard: Dashboard,
  opportunity: Opportunity,
  order: Order,
  contact: Contact,
  account: Account,
  contract: Contract,
  billing_account: BillingAccount,
  request: Request,
  message: Message,
  thread: Thread,
  mark_email_unread: MarkMessageUnread,
  mark_note_unread: MarkNoteUnread,
  mark_note_read: MarkNoteRead,
  mark_email_read: MarkMessageRead,
  move_to_inbox: MoveToInbox,
  file: File,
  email_template: EmailTemplate,
  file_shared: FileShared,
  note: Note,
  document: Document,
  templates: Templates,
  product: Product,
  price: Price,
  tax: Tax,
  submission: Submission,
  partner: Partner,
  partnering: Partnering,
  meter: Meter,
  entity: Entity,
  webhook: Webhook,
  design: Design,
  workflow: Workflow,
  blueprint: Blueprint,
  phase: Phase,
  automation: Automation,
  automation_circle: AutomationCircle,
  journey: Journey,
  relations: Relations,
  availability: Availability,
  filter: Filter,
  sort: Sort,
  desktop: Desktop,
  phone: Phone,
  image: Image,
  pause: Pause,
  play: Play,
  alarm: Alarm,
  arrow_circle_left: ArrowCircleLeft,
  more_vert: MoreVert,
  more_horiz: MoreHoriz,
  more_horiz_circle: MoreHorizCircle,
  question_mark: QuestionMark,
  skip: Skip,
  checklist: Checklist,
  person_check: PersonCheck,
  person_add: PersonAdd,
  comment: Comment,
  star: Star,
  store: Store,
  exclamation: Exclamation,
  primary: Primary,
  price_mapping: PriceMapping,
  reply: Reply,
  reply_all: ReplyAll,
  resize: Resize,
  portal: Portal,
  thumb_up: ThumbUp,
  thumb_down: ThumbDown,
  entity_builder: EntityBuilder,
  connection: Connection,
  check_box: CheckBox,
  number: Number,
  radio_button: RadioButton,
  text_field: TextField,
  address: Address,
  signature: Signature,
  upload: Upload,
  calculator: Calculator,
  payment: Payment,
  consent: Consent,
  paragraph: Paragraph,
  action: Action,
  attribute_edit: AttributeEdit,
  summary: Summary,
  solar: Solar,
  sdk: SDK,
  lookup: Lookup,
  previous_provider: PreviousProvider,
  success_confirmation: SuccessConfirmation,
  category: Category,
  expand_content: ExpandContent,
  collapse_content: CollapseContent,
  map: Map,
  sun: Sun,
  frame: Frame,
  energy_savings_leaf: EnergySavingsLeaf,
  avg_time: AvgTime,
  call: Call,
  mail: Mail,
  cable: Cable,
  table_rows_narrow: Stack,
  two_columns: TwoColumns,
  diagram: Diagram,
  repeat: Repeat,
  move_down: MoveDown,
  step_over: StepOver,
  pending_actions: Pending,
  pause_circle: PauseCircle,
  condition: Condition,
  condition_circle: ConditionCircle,
  note_stack: NoteStack,
  double_thumbs_up: DoubleThumbsUp,
  ai_star: AIStar,
  ai_compose: AICompose,
  label: Label,
  label_off: LabelOff,
  remove: Remove,
  file_manager: FileManager,
  bolt: Bolt,
  viewDay: ViewDay,
  flip: Flip,
  update: Update,
  schedule: Schedule,
  calendar_clock: CalendarClock,
  read_more: ReadMore,
  keep: Keep,
  keep_off: KeepOff,
  grid: Grid,
  grid_view: GridView,
  auto_delete: AutoDelete,
  delete_forever: DeleteForever,
  history: Restore,
  forest: Forest,
  fuel: Fuel,
  recycling: Recycling,
  dangerous: Dangerous,
  apartment: Apartment,
  play_circle: PlayCircle,
  add_task: AddTask,
  raven: Raven,
  drive_file_move: DriveFileMove,
  merge: Merge,
  archive: Archive,
  unarchive: Unarchive,
  location_away: LocationAway,
  link_off: LinkOff,
  account_circle_off: AccountCircleOff,
  send: Send,
  undo: Undo,
  chip_extraction: ChipExtraction,
  target: Target,
  campaign: Campaign,
  ticket: Ticket,
  flow: Flow,
  cards: Cards,
  task: Task,
  widgets: Widgets,
  attach: Attach,
  description: Description,
  stacked_email: StackedEmail,
  chat_bubble: ChatBubble,
  globe: Globe,
  home: Home,
  euro: Euro,
  toggle: Toggle,
  numbers: Numbers,
  building: Building,
  move: Move,
  move_in: MoveIn,
  condition_graph: ConditionGraph,
  feature_search: FeatureSearch,
  synchronize: Synchronize,
  arrow_upward: ArrowUp,
  arrow_downward: ArrowDown,
  regular_expression: RegularExpression,
  inbox: Inbox,
  edit_document: EditDocument,
  left_panel_close: LeftPanelClose,
  left_panel_open: LeftPanelOpen,
  hand: Hand,
  smart_toy: SmartToy,
  admin_panel_settings: AdminPanelSettings,
  sync: Sync,
  sync_disabled: SyncDisabled,
  do_not_disturb_on: DoNotDisturbOn,
  swap: Swap,
  expand: Expand,
  collapse: Collapse,
  action_key: ActionKey,
  bar_chart: BarChart,
  database: Database,
  coupon: Coupon,
  product_recommendation: ProductRecommendation,
  location: Location,
  labs: Labs,
  format_bold: FormatBold,
  format_italic: FormatItalic,
  format_underlined: FormatUnderlined,
  format_strikethrough: FormatStrikethrough,
  heading: Heading,
  format_list_bulleted: FormatListBulleted,
  format_list_numbered: FormatListNumbered,
  code: Code,
  group: Group,
  folder_limited: FolderLimited,
  analytics: Analytics,
  area_chart: AreaChart,
  trending: Trending,
  library: Library,
  chart_line: ChartLine,
};

export type IconName = keyof typeof IconComponentsMap;
type Props = IconPropsReact & { name: IconName };

export const EpilotIcon = (props: Props) => {
  const { name, ...restProps } = props;

  const iconComponent = IconComponentsMap[name];

  if (!iconComponent) return null;

  return React.createElement(iconComponent, restProps);
};

export default EpilotIcon;
