// Search new icons at https://reactsvgicons.com/
// Note: save this file using Ctrl + K, Ctrl + Shift + S to disable autoformat
// Note: For Cursor hotkeys are Ctrl + M, Ctrl + Shift + S

/* eslint-disable simple-import-sort/exports */
// ==== General actions =======
export { BiMenu           as IconMenu }           from 'react-icons/bi';
export { LuLogOut         as IconLogout }         from 'react-icons/lu';
export { FiSave           as IconSave }           from 'react-icons/fi';
export { BiCheck          as IconAccept }         from 'react-icons/bi';
export { BiX              as IconRemove }         from 'react-icons/bi';
export { BiTrash          as IconDestroy }        from 'react-icons/bi';
export { BiReset          as IconReset }          from 'react-icons/bi';
export { TbArrowsDiagonal2 as IconResize }        from 'react-icons/tb';
export { FiEdit           as IconEdit }           from 'react-icons/fi';
export { AiOutlineEdit    as IconEdit2 }          from 'react-icons/ai';
export { BiSearchAlt2     as IconSearch }         from 'react-icons/bi';
export { BiDownload       as IconDownload }       from 'react-icons/bi';
export { BiUpload         as IconUpload }         from 'react-icons/bi';
export { LuSettings       as IconSettings }       from 'react-icons/lu';
export { TbEye            as IconShow }           from 'react-icons/tb';
export { TbEyeX           as IconHide }           from 'react-icons/tb';
export { BiShareAlt       as IconShare }          from 'react-icons/bi';
export { LuFilter         as IconFilter }         from 'react-icons/lu';
export { LuQrCode         as IconQR }             from 'react-icons/lu';
export { LuFilterX        as IconFilterReset }    from 'react-icons/lu';
export {BiDownArrowCircle as IconOpenList }       from 'react-icons/bi';
export { LuTriangleAlert  as IconAlert }          from 'react-icons/lu';
export { LuPanelLeftOpen  as IconLeftOpen }       from 'react-icons/lu';
export { LuPanelLeftClose as IconLeftClose }      from 'react-icons/lu';
export { LuPanelBottomOpen as IconBottomOpen }    from 'react-icons/lu';
export { LuPanelBottomClose as IconBottomClose }  from 'react-icons/lu';

// ===== UI elements =======
export { BiX              as IconClose }          from 'react-icons/bi';
export { LuChevronDown    as IconDropArrow }      from 'react-icons/lu';
export { LuChevronUp      as IconDropArrowUp }    from 'react-icons/lu';
export { RiMenuFoldFill   as IconMenuFold }       from 'react-icons/ri';
export { RiMenuUnfoldFill as IconMenuUnfold }     from 'react-icons/ri';
export { LuMoon           as IconDarkTheme }      from 'react-icons/lu';
export { LuSun            as IconLightTheme }     from 'react-icons/lu';
export { IoVideocamOutline as IconVideo }         from 'react-icons/io5';
export { LuFolderTree     as IconFolderTree }     from 'react-icons/lu';
export { LuFolder         as IconFolder }         from 'react-icons/lu';
export { LuFolderSearch   as IconFolderSearch }   from 'react-icons/lu';
export { LuFolders        as IconSubfolders }     from 'react-icons/lu';
export { LuFolderPen      as IconFolderEdit }     from 'react-icons/lu';
export { LuFolderOpen     as IconFolderOpened }   from 'react-icons/lu';
export { LuFolderClosed   as IconFolderClosed }   from 'react-icons/lu';
export { LuFolderDot      as IconFolderEmpty }    from 'react-icons/lu';
export { TbHelpOctagon    as IconHelp }           from 'react-icons/tb';
export { LuPresentation   as IconSample }         from 'react-icons/lu';
export { LuLightbulbOff   as IconHelpOff }        from 'react-icons/lu';
export { RiPushpinFill    as IconPin }            from 'react-icons/ri';
export { RiUnpinLine      as IconUnpin }          from 'react-icons/ri';
export { BiCaretDown      as IconSortDesc }       from 'react-icons/bi';
export { BiCaretUp        as IconSortAsc }        from 'react-icons/bi';
export { BiChevronLeft    as IconPageLeft }       from 'react-icons/bi';
export { BiChevronRight   as IconPageRight }      from 'react-icons/bi';
export { BiFirstPage      as IconPageFirst }      from 'react-icons/bi';
export { BiLastPage       as IconPageLast }       from 'react-icons/bi';
export { TbCalendarPlus   as IconDateCreate }     from 'react-icons/tb';
export { TbCalendarRepeat as IconDateUpdate }     from 'react-icons/tb';
export { PiFileCsv        as IconCSV }            from 'react-icons/pi';
export { BsFiletypeJson   as IconJSON }           from 'react-icons/bs';

// ==== User status =======
export { LuCircleUserRound as IconUser }          from 'react-icons/lu';
export { FaUserAstronaut  as IconAssistant }      from 'react-icons/fa6';
export { IoChatbubblesOutline as IconChat }       from 'react-icons/io5';
export { FaCircleUser     as IconUser2 }          from 'react-icons/fa6';
export { TbUserEdit       as IconEditor }         from 'react-icons/tb';
export { TbUserSearch     as IconUserSearch }     from 'react-icons/tb';
export { LuCrown          as IconOwner }          from 'react-icons/lu';
export { TbMeteor         as IconAdmin }          from 'react-icons/tb';
export { TbMeteorOff      as IconAdminOff }       from 'react-icons/tb';
export { LuGlasses        as IconReader }         from 'react-icons/lu';

// ===== Domain entities =======
export { TbBriefcase      as IconBusiness }       from 'react-icons/tb';
export { VscLibrary       as IconLibrary }        from 'react-icons/vsc';
export { BiBot            as IconRobot }          from 'react-icons/bi';
export { TbGps            as IconCoordinates }    from 'react-icons/tb';
export { IoLibrary        as IconLibrary2 }       from 'react-icons/io5';
export { BiDiamond        as IconTemplates }      from 'react-icons/bi';
export { TbHexagons       as IconOSS }            from 'react-icons/tb';
export { MdOutlineSelectAll as IconConceptBlock } from 'react-icons/md';
export { TbHexagon        as IconRSForm }         from 'react-icons/tb';
export { TbAssembly       as IconRSFormOwned }    from 'react-icons/tb';
export { TbBallFootball   as IconRSFormImported } from 'react-icons/tb';
export { TbHexagonLetterN as IconCstNominal }     from 'react-icons/tb';
export { TbHexagonLetterX as IconCstBaseSet }     from 'react-icons/tb';
export { TbHexagonLetterC as IconCstConstSet }    from 'react-icons/tb';
export { TbHexagonLetterS as IconCstStructured }  from 'react-icons/tb';
export { TbHexagonLetterA as IconCstAxiom }       from 'react-icons/tb';
export { TbHexagonLetterD as IconCstTerm }        from 'react-icons/tb';
export { TbHexagonLetterF as IconCstFunction }    from 'react-icons/tb';
export { TbHexagonLetterP as IconCstPredicate }   from 'react-icons/tb';
export { TbHexagonLetterT as IconCstTheorem }     from 'react-icons/tb';
export { PiArrowsMergeFill as IconSynthesis }     from 'react-icons/pi';
export { VscReferences    as IconReference }      from 'react-icons/vsc';
export { LuNewspaper      as IconDefinition }     from 'react-icons/lu';
export { LuDna            as IconTerminology }    from 'react-icons/lu';
export { FaRegHandshake   as IconConvention }     from 'react-icons/fa6';
export { LiaCloneSolid    as IconChild }          from 'react-icons/lia';
export { TbTopologyRing   as IconConsolidation }  from 'react-icons/tb';
export { BiSpa            as IconPredecessor }    from 'react-icons/bi';
export { LuArchive        as IconArchive }        from 'react-icons/lu';
export { LuDatabase       as IconDatabase }       from 'react-icons/lu';
export { LuView           as IconDBStructure }    from 'react-icons/lu';  
export { LuPlaneTakeoff   as IconRESTapi }        from 'react-icons/lu';
export { LuImage          as IconImage }          from 'react-icons/lu';
export { GoVersions       as IconVersions }       from 'react-icons/go';
export { LuAtSign         as IconTerm }           from 'react-icons/lu';
export { MdTaskAlt        as IconCrucial }        from 'react-icons/md';
export { LuSubscript      as IconAlias }          from 'react-icons/lu';
export { TbMathFunction   as IconFormula }        from 'react-icons/tb';
export { BiFontFamily     as IconText }           from 'react-icons/bi';
export { BiFont           as IconTextOff }        from 'react-icons/bi';
export { TbCircleLetterM  as IconTypeGraph }      from 'react-icons/tb';
export { RiTreeLine       as IconTree }           from 'react-icons/ri';
export { LuKeyboard       as IconKeyboard }       from 'react-icons/lu';
export { LuKeyboardOff    as IconKeyboardOff }    from 'react-icons/lu';
export { RiLockLine       as IconImmutable }      from 'react-icons/ri';
export { RiLockUnlockLine as IconMutable }        from 'react-icons/ri';
export { RiOpenSourceLine as IconPublic }         from 'react-icons/ri';
export { RiShieldLine     as IconProtected }      from 'react-icons/ri';
export { RiShieldKeyholeLine as IconPrivate }     from 'react-icons/ri';
export { BiBug            as IconStatusError }    from 'react-icons/bi';
export { LuThumbsUp       as IconStatusOK }       from 'react-icons/lu';
export { BiHelpCircle     as IconStatusUnknown }  from 'react-icons/bi';
export { BiStopCircle     as IconStatusIncalculable } from 'react-icons/bi';
export { BiPauseCircle    as IconStatusProperty } from 'react-icons/bi';
export { LuPower          as IconKeepAliasOn }    from 'react-icons/lu';
export { LuPowerOff       as IconKeepAliasOff }   from 'react-icons/lu';

// ===== Domain actions =====
export { BiUpvote         as IconMoveUp }         from 'react-icons/bi';
export { BiDownvote       as IconMoveDown }       from 'react-icons/bi';
export { BiRightArrow     as IconMoveRight }      from 'react-icons/bi';
export { BiLeftArrow      as IconMoveLeft }       from 'react-icons/bi';
export { TbHexagonPlus2   as IconNewRSForm }      from 'react-icons/tb';
export { BiPlusCircle     as IconNewItem }        from 'react-icons/bi';
export { FaSquarePlus     as IconNewItem2 }       from 'react-icons/fa6';
export { PiStackPlus      as IconNewVersion }     from 'react-icons/pi';
export { BiDuplicate      as IconClone }          from 'react-icons/bi';
export { LuReplace        as IconReplace }        from 'react-icons/lu';
export { FaSortAmountDownAlt as IconSortList }    from 'react-icons/fa';
export { LuNetwork        as IconGenerateStructure } from 'react-icons/lu';
export { LuBookCopy       as IconInlineSynthesis } from 'react-icons/lu';
export { LuWandSparkles   as IconGenerateNames }  from 'react-icons/lu';
export { GrConnect        as IconConnect }        from 'react-icons/gr';
export { BiPlayCircle     as IconExecute }        from 'react-icons/bi';

// ======== Graph UI =======
export { PiFediverseLogo  as IconContextSelection } from 'react-icons/pi';
export { ImMakeGroup      as IconGroupSelection } from 'react-icons/im';
export { BiCollapse       as IconGraphCollapse }  from 'react-icons/bi';
export { BiExpand         as IconGraphExpand }    from 'react-icons/bi';
export { TiArrowMaximise  as IconGraphMaximize }  from 'react-icons/ti';
export { BiGitBranch      as IconGraphInputs }    from 'react-icons/bi';
export { TbEarScan        as IconGraphInverse }   from 'react-icons/tb';
export { BiGitMerge       as IconGraphOutputs }   from 'react-icons/bi';
export { LuAtom           as IconGraphCore }      from 'react-icons/lu';
export { MdOutlineFitScreen as IconFitImage }     from 'react-icons/md';
export { RiFocus3Line     as IconFocus }          from 'react-icons/ri';
export { LuSparkles       as IconClustering }     from 'react-icons/lu';
export { LuSparkle        as IconClusteringOff }  from 'react-icons/lu';
export { TbGridDots       as IconGrid }           from 'react-icons/tb';
export { FaSlash          as IconLineStraight }   from 'react-icons/fa6';
export { PiWaveSineLight  as IconLineWave }       from 'react-icons/pi';
export { LuCircleDashed   as IconAnimation }      from 'react-icons/lu';
export { LuCircle         as IconAnimationOff }   from 'react-icons/lu';

// ===== Custom elements ======
export interface DomIconProps<RequestData> extends IconProps {
  value: RequestData;
}

interface IconSVGProps {
  viewBox: string;
  size?: string;
  className?: string;
  props?: React.SVGProps<SVGSVGElement>;
}

export interface IconProps {
  size?: string;
  className?: string;
}

function MetaIconSVG({ viewBox, size = '1.5rem', props, className, children }: React.PropsWithChildren<IconSVGProps>) {
  return (
    <svg width={size} height={size} fill='currentColor' className={className} viewBox={viewBox} {...props}>
      {children}
    </svg>
  );
}

export function IconManuals(props: IconProps) {
  return (
    <MetaIconSVG viewBox='0 0 20 20' {...props}>
      <path d='M3.33 8L10 12l10-6-10-6L0 6h10v2H3.33zM0 8v8l2-2.22V9.2L0 8zm10 12l-5-3-2-1.2v-6l7 4.2 7-4.2v6L10 20z' />
    </MetaIconSVG>
  );
}

export function IconLogin(props: IconProps) {
  return (
    <MetaIconSVG viewBox='0 0 24 24' {...props}>
      <path fill='none' d='M0 0h24v24H0z' />
      <path d='M10 11H4V3a1 1 0 011-1h14a1 1 0 011 1v18a1 1 0 01-1 1H5a1 1 0 01-1-1v-8h6v3l5-4-5-4v3z' />
    </MetaIconSVG>
  );
}


export function CheckboxChecked() {
  return (
    <svg className='w-4 h-4 p-0.75 -ml-0.25 -mt-0.25' viewBox='0 0 512 512' fill='#ffffff'>
      <path d='M470.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L192 338.7l233.4-233.3c12.5-12.5 32.8-12.5 45.3 0z' />
    </svg>
  );
}

export function CheckboxNull() {
  return (
    <svg className='w-4 h-4 px-0.25 -ml-0.25 -mt-0.25' viewBox='0 0 16 16' fill='#ffffff'>
      <path d='M2 7.75A.75.75 0 012.75 7h10a.75.75 0 010 1.5h-10A.75.75 0 012 7.75z' />
    </svg>
  );
}