// Copyright (c) 2026 Sidero Labs, Inc.
//
// Use of this software is governed by the Business Source License
// included in the LICENSE file.
import {
  ArrowDownTrayIcon,
  ArrowUpCircleIcon,
  ArrowUpTrayIcon,
  CalendarIcon,
  ChartBarIcon,
  CircleStackIcon,
  CodeBracketIcon,
  CpuChipIcon,
  DocumentIcon,
  DocumentTextIcon,
  PauseCircleIcon,
  PlayCircleIcon,
  PowerIcon,
  ServerIcon,
  ServerStackIcon,
  TagIcon,
  UserIcon,
  UserPlusIcon,
  UsersIcon,
  WindowIcon,
} from '@heroicons/vue/24/outline'
import { LifebuoyIcon } from '@heroicons/vue/24/solid'
import { defineAsyncComponent } from 'vue'

export const icons = {
  'action-horizontal': defineAsyncComponent(() => import('../icons/IconActionHorizontal.vue')),
  'action-vertical': defineAsyncComponent(() => import('../icons/IconActionVertical.vue')),
  'arrow-down': defineAsyncComponent(() => import('../icons/IconArrowDown.vue')),
  'arrow-down-tray': ArrowDownTrayIcon,
  'arrow-left': defineAsyncComponent(() => import('../icons/IconArrowLeft.vue')),
  'arrow-right-square': defineAsyncComponent(() => import('../icons/IconArrowRightSquare.vue')),
  'arrow-right': defineAsyncComponent(() => import('../icons/IconArrowRight.vue')),
  'arrow-up-circle': ArrowUpCircleIcon,
  'arrow-up-on-square-stack': defineAsyncComponent(
    () => import('../icons/IconArrowUpOnSquareStack.vue'),
  ),
  'arrow-up-tray': ArrowUpTrayIcon,
  'arrow-up': defineAsyncComponent(() => import('../icons/IconArrowUp.vue')),
  'arrows-right-left': defineAsyncComponent(() => import('../icons/IconArrowsRightLeft.vue')),
  'arrows-up-down': defineAsyncComponent(() => import('../icons/IconArrowsUpDown.vue')),
  attention: defineAsyncComponent(() => import('../icons/IconAttention.vue')),
  aws: defineAsyncComponent(() => import('../icons/IconAWS.vue')),
  'bootstrap-manifests': DocumentTextIcon,
  box: defineAsyncComponent(() => import('../icons/IconBox.vue')),
  calendar: CalendarIcon,
  change: defineAsyncComponent(() => import('../icons/IconChange.vue')),
  'chart-bar': ChartBarIcon,
  'check-in-circle-classic': defineAsyncComponent(
    () => import('../icons/IconCheckInCircleClassic.vue'),
  ),
  'check-in-circle': defineAsyncComponent(() => import('../icons/IconCheckInCircle.vue')),
  check: defineAsyncComponent(() => import('../icons/IconCheck.vue')),
  'circle-stack': CircleStackIcon,
  close: defineAsyncComponent(() => import('../icons/IconClose.vue')),
  'cloud-connection': defineAsyncComponent(() => import('../icons/IconCloudConnection.vue')),
  'clusters-big': defineAsyncComponent(() => import('../icons/IconClustersBig.vue')),
  clusters: defineAsyncComponent(() => import('../icons/IconClusters.vue')),
  'code-bracket': CodeBracketIcon,
  complete: defineAsyncComponent(() => import('../icons/IconComplete.vue')),
  copy: defineAsyncComponent(() => import('../icons/IconCopy.vue')),
  'cpu-chip': CpuChipIcon,
  dashboard: defineAsyncComponent(() => import('../icons/IconDashboard.vue')),
  delete: defineAsyncComponent(() => import('../icons/IconDelete.vue')),
  document: DocumentIcon,
  documentation: defineAsyncComponent(() => import('../icons/IconDocumentation.vue')),
  dot: defineAsyncComponent(() => import('../icons/IconDot.vue')),
  'drop-right': defineAsyncComponent(() => import('../icons/IconDropRight.vue')),
  'drop-up': defineAsyncComponent(() => import('../icons/IconDropUp.vue')),
  dropdown: defineAsyncComponent(() => import('../icons/IconDropdown.vue')),
  edit: defineAsyncComponent(() => import('../icons/IconEdit.vue')),
  error: defineAsyncComponent(() => import('../icons/IconError.vue')),
  'exposed-service': WindowIcon,
  'extensions-toggle': defineAsyncComponent(() => import('../icons/IconExtensionsToggle.vue')),
  extensions: defineAsyncComponent(() => import('../icons/IconExtensions.vue')),
  'external-link': defineAsyncComponent(() => import('../icons/IconExternalLink.vue')),
  'fail-auth': defineAsyncComponent(() => import('../icons/IconFailAuth.vue')),
  folder: defineAsyncComponent(() => import('../icons/IconFolder.vue')),
  'folder-open': defineAsyncComponent(() => import('../icons/IconFolderOpen.vue')),
  gcp: defineAsyncComponent(() => import('../icons/IconGCP.vue')),
  hamburger: defineAsyncComponent(() => import('../icons/IconHamburger.vue')),
  'header-logo': defineAsyncComponent(() => import('../icons/IconHeaderLogo.vue')),
  home: defineAsyncComponent(() => import('../icons/IconHome.vue')),
  'in-progress': defineAsyncComponent(() => import('../icons/IconInProgress.vue')),
  info: defineAsyncComponent(() => import('../icons/IconInfo.vue')),
  key: defineAsyncComponent(() => import('../icons/IconKey.vue')),
  'kube-config': defineAsyncComponent(() => import('../icons/IconKubeConfig.vue')),
  kubernetes: defineAsyncComponent(() => import('../icons/IconKubernetes.vue')),
  lifebuoy: LifebuoyIcon,
  'link-down': defineAsyncComponent(() => import('../icons/IconLinkDown.vue')),
  loading: defineAsyncComponent(() => import('../icons/IconLoading.vue')),
  'locked-toggle': defineAsyncComponent(() => import('../icons/IconLockClosedToggle.vue')),
  locked: defineAsyncComponent(() => import('../icons/IconLocked.vue')),
  log: defineAsyncComponent(() => import('../icons/IconLog.vue')),
  logo: defineAsyncComponent(() => import('../icons/IconLogo.vue')),
  'long-arrow-down': defineAsyncComponent(() => import('../icons/IconLongArrowDown.vue')),
  'long-arrow-left': defineAsyncComponent(() => import('../icons/IconLongArrowLeft.vue')),
  'long-arrow-right': defineAsyncComponent(() => import('../icons/IconLongArrowRight.vue')),
  'long-arrow-top': defineAsyncComponent(() => import('../icons/IconLongArrowTop.vue')),
  'machines-autoprovisioned': defineAsyncComponent(
    () => import('../icons/IconMachinesAutoprovisioned.vue'),
  ),
  'machines-manual': defineAsyncComponent(() => import('../icons/IconMachinesManual.vue')),
  minus: defineAsyncComponent(() => import('../icons/IconMinus.vue')),
  'no-connection': defineAsyncComponent(() => import('../icons/IconNoConnection.vue')),
  nodes: defineAsyncComponent(() => import('../icons/IconNodes.vue')),
  'ongoing-tasks': defineAsyncComponent(() => import('../icons/IconOngoingTasks.vue')),
  overview: defineAsyncComponent(() => import('../icons/IconOverview.vue')),
  'pause-circle': PauseCircleIcon,
  pin: defineAsyncComponent(() => import('../icons/IconPin.vue')),
  'play-circle': PlayCircleIcon,
  plus: defineAsyncComponent(() => import('../icons/IconPlus.vue')),
  pods: defineAsyncComponent(() => import('../icons/IconPods.vue')),
  power: PowerIcon,
  'power-off': defineAsyncComponent(() => import('../icons/IconPowerOff.vue')),
  question: defineAsyncComponent(() => import('../icons/IconQuestion.vue')),
  'question-mark-circle': defineAsyncComponent(() => import('../icons/IconQuestionMarkCircle.vue')),
  reboot: defineAsyncComponent(() => import('../icons/IconReboot.vue')),
  refresh: defineAsyncComponent(() => import('../icons/IconRefresh.vue')),
  reset: defineAsyncComponent(() => import('../icons/IconReset.vue')),
  rollback: defineAsyncComponent(() => import('../icons/IconRollback.vue')),
  search: defineAsyncComponent(() => import('../icons/IconSearch.vue')),
  'server-network': defineAsyncComponent(() => import('../icons/IconServerNetwork.vue')),
  'server-stack': ServerStackIcon,
  server: ServerIcon,
  'settings-toggle': defineAsyncComponent(() => import('../icons/IconSettingsToggle.vue')),
  settings: defineAsyncComponent(() => import('../icons/IconSettings.vue')),
  'sidero-monochrome': defineAsyncComponent(() => import('../icons/IconSideroMonochrome.vue')),
  sidero: defineAsyncComponent(() => import('../icons/IconSidero.vue')),
  tag: TagIcon,
  talos: defineAsyncComponent(() => import('../icons/IconTalos.vue')),
  'talos-config': defineAsyncComponent(() => import('../icons/IconTalosConfig.vue')),
  terminal: defineAsyncComponent(() => import('../icons/IconTerminal.vue')),
  time: defineAsyncComponent(() => import('../icons/IconTime.vue')),
  unknown: defineAsyncComponent(() => import('../icons/IconUnknown.vue')),
  unlink: defineAsyncComponent(() => import('../icons/IconUnlink.vue')),
  unlocked: defineAsyncComponent(() => import('../icons/IconUnlocked.vue')),
  'upgrade-available': defineAsyncComponent(() => import('../icons/IconUpgradeAvailable.vue')),
  'upgrade-empty-state': defineAsyncComponent(() => import('../icons/IconUpgradeEmptyState.vue')),
  upgrade: defineAsyncComponent(() => import('../icons/IconUpgrade.vue')),
  upload: defineAsyncComponent(() => import('../icons/IconUpload.vue')),
  'user-add': UserPlusIcon,
  user: UserIcon,
  users: UsersIcon,
  waiting: defineAsyncComponent(() => import('../icons/IconWaiting.vue')),
  'warning-clear': defineAsyncComponent(() => import('../icons/IconWarningClear.vue')),
  warning: defineAsyncComponent(() => import('../icons/IconWarning.vue')),
}
