import { faArrowRight, faCircleNotch, faPlus, faPencilAlt, faSave, faTimes, faTrash, faCheck, faQuestionCircle, faTimesCircle, faExclamationTriangle, faSearch, faUser, faUsers, faAsterisk, faInfoCircle, faDollarSign, faCaretRight, faCaretLeft, faCaretUp, faCaretDown, faAngleRight, faAngleLeft, faAngleUp, faAngleDown, faChevronRight, faChevronLeft, faChevronUp, faChevronDown, faAngleDoubleRight, faAngleDoubleLeft, faCalendar, faBars, faEllipsisV, faFile, faFilePdf, faFileCsv,faFileExcel,faFileWord, faFilePowerpoint, faFileImage, faFileVideo, faFileUpload, faCloudUploadAlt, faCloudDownloadAlt, faClock, faUndo, faFilter } from '@fortawesome/free-solid-svg-icons' import { library } from '@fortawesome/fontawesome-svg-core' import { expectedValues } from "@/util/prop-validators"; import { pick, isObject, isString } from "@/util/util"; library.add( faArrowRight, faCircleNotch, faPlus, faPencilAlt, faSave, faTimes, faTrash, faCheck, faQuestionCircle, faTimesCircle, faExclamationTriangle, faSearch, faAsterisk, faUser, faUsers, faInfoCircle, faDollarSign, faCaretRight, faCaretLeft, faCaretUp, faCaretDown, faAngleRight, faAngleLeft, faAngleUp, faAngleDown, faChevronRight, faChevronLeft, faChevronUp, faChevronDown, faAngleDoubleRight, faAngleDoubleLeft, faCalendar, faBars, faEllipsisV, faFile,faFilePdf,faFileCsv,faFileExcel,faFileWord, faFilePowerpoint, faFileImage, faFileVideo, faFileUpload, faCloudUploadAlt, faCloudDownloadAlt, faClock, faUndo, faFilter ) export const coreIconMap: any = { 'arrow': faArrowRight, 'asterisk': faAsterisk, 'busy': faCircleNotch, 'new': faPlus, 'edit': faPencilAlt, 'confirm': faCheck, 'cancel': faTimes, 'save': faSave, 'delete': faTrash, 'close': faTimesCircle, 'undo': faUndo, 'search': faSearch, 'filter': faFilter, 'info': faInfoCircle, 'success': faCheck, 'required': faAsterisk, 'error': faExclamationTriangle, 'warning': faExclamationTriangle, 'danger': faExclamationTriangle, 'unknown': faQuestionCircle, 'person': faUser, 'user': faUser, 'users': faUsers, 'group': faUsers, 'menu': faBars, 'options': faEllipsisV, 'calendar': faCalendar, 'clock': faClock, 'money': faDollarSign, 'upload': faCloudUploadAlt, 'download': faCloudDownloadAlt, 'left': faAngleLeft, 'right': faAngleRight, 'up': faAngleUp, 'down': faAngleDown, 'first': faAngleDoubleLeft, 'last': faAngleDoubleRight, 'caret-left': faCaretLeft, 'caret-right': faCaretRight, 'caret-up': faCaretUp, 'caret-down': faCaretDown, 'file': faFile, 'file-pdf':faFilePdf, 'file-csv': faFileCsv, 'file-excel': faFileExcel, 'file-word': faFileWord, 'file-powerpoint': faFilePowerpoint, 'file-image': faFileImage, 'file-video': faFileVideo, 'file-upload': faFileUpload, 'default': faAsterisk, 'primary': faAsterisk, 'secondary': faAsterisk, } export const coreIconKeys = Object.keys(coreIconMap) export const iconValidator = function (value: string) { // If we don't have a value, let it pass if (!value) return true if (isString(value)) { let expectationCheck = expectedValues( ...coreIconKeys ) return expectationCheck(value) } else if (isObject(value)) { return Object.keys(value).length === 0 || value.hasOwnProperty('icon') } else { return false } } export const iconPropDef = { required: false, default: undefined, validator: iconValidator } export const iconProps = { icon: { ...iconPropDef } } export const coreCustomizations = function (icon: string) { let customClasses = [] let normalizedIconProp = pick(icon).trim().toLowerCase() switch (normalizedIconProp) { case 'busy': customClasses.push('animate-spin') break case 'success': customClasses.push('text-success', 'opacity-100') break case 'error': customClasses.push('text-danger', 'opacity-100') break case 'required': customClasses.push('text-danger') break } return customClasses }