diff --git a/VDS.xcodeproj/project.pbxproj b/VDS.xcodeproj/project.pbxproj index 1648be01..2d6eb953 100644 --- a/VDS.xcodeproj/project.pbxproj +++ b/VDS.xcodeproj/project.pbxproj @@ -58,6 +58,10 @@ EA985BEE2968A92400F2FF2E /* TitleLockupSubTitleModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA985BED2968A92400F2FF2E /* TitleLockupSubTitleModel.swift */; }; EA985BF02968A93600F2FF2E /* TitleLockupEyebrowModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA985BEF2968A93600F2FF2E /* TitleLockupEyebrowModel.swift */; }; EA985BF22968B5BB00F2FF2E /* TitleLockupTypography.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA985BF12968B5BB00F2FF2E /* TitleLockupTypography.swift */; }; + EA985BF5296C60C000F2FF2E /* Icon.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA985BF4296C60C000F2FF2E /* Icon.swift */; }; + EA985BF7296C665E00F2FF2E /* IconName.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA985BF6296C665E00F2FF2E /* IconName.swift */; }; + EA985BF9296C710100F2FF2E /* IconColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA985BF8296C710100F2FF2E /* IconColor.swift */; }; + EA985BFB296C78D500F2FF2E /* IconCategory.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA985BFA296C78D500F2FF2E /* IconCategory.swift */; }; EAA5EEB528ECBFB4003B3210 /* ImageLabelAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAA5EEB428ECBFB4003B3210 /* ImageLabelAttribute.swift */; }; EAA5EEB728ECC03A003B3210 /* ToolTipLabelAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAA5EEB628ECC03A003B3210 /* ToolTipLabelAttribute.swift */; }; EAA5EEB928ECD24B003B3210 /* Icons.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EAA5EEB828ECD24B003B3210 /* Icons.xcassets */; }; @@ -165,6 +169,10 @@ EA985BED2968A92400F2FF2E /* TitleLockupSubTitleModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleLockupSubTitleModel.swift; sourceTree = ""; }; EA985BEF2968A93600F2FF2E /* TitleLockupEyebrowModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleLockupEyebrowModel.swift; sourceTree = ""; }; EA985BF12968B5BB00F2FF2E /* TitleLockupTypography.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleLockupTypography.swift; sourceTree = ""; }; + EA985BF4296C60C000F2FF2E /* Icon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Icon.swift; sourceTree = ""; }; + EA985BF6296C665E00F2FF2E /* IconName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconName.swift; sourceTree = ""; }; + EA985BF8296C710100F2FF2E /* IconColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconColor.swift; sourceTree = ""; }; + EA985BFA296C78D500F2FF2E /* IconCategory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconCategory.swift; sourceTree = ""; }; EAA5EEB428ECBFB4003B3210 /* ImageLabelAttribute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageLabelAttribute.swift; sourceTree = ""; }; EAA5EEB628ECC03A003B3210 /* ToolTipLabelAttribute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolTipLabelAttribute.swift; sourceTree = ""; }; EAA5EEB828ECD24B003B3210 /* Icons.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Icons.xcassets; sourceTree = ""; }; @@ -332,6 +340,7 @@ EA4DB2FE28DCBC1900103EE3 /* Badge */, EA0FC2BE2912D18200DF80B4 /* Buttons */, EAF7F092289985E200B287F5 /* Checkbox */, + EA985BF3296C609E00F2FF2E /* Icon */, EA3362412892EF700071C351 /* Label */, EA89200B28B530F0006B9984 /* RadioBox */, EAF7F11428A1470D00B287F5 /* RadioButton */, @@ -499,6 +508,17 @@ path = RadioBox; sourceTree = ""; }; + EA985BF3296C609E00F2FF2E /* Icon */ = { + isa = PBXGroup; + children = ( + EA985BF4296C60C000F2FF2E /* Icon.swift */, + EA985BFA296C78D500F2FF2E /* IconCategory.swift */, + EA985BF8296C710100F2FF2E /* IconColor.swift */, + EA985BF6296C665E00F2FF2E /* IconName.swift */, + ); + path = Icon; + sourceTree = ""; + }; EAB1D2D028ABEF3100DAE764 /* Typography */ = { isa = PBXGroup; children = ( @@ -725,6 +745,7 @@ EA4DB2FD28D3D0CA00103EE3 /* AnyEquatable.swift in Sources */, EAA5EEB728ECC03A003B3210 /* ToolTipLabelAttribute.swift in Sources */, EA5E305A29510F8B0082B959 /* EnumSubset.swift in Sources */, + EA985BF7296C665E00F2FF2E /* IconName.swift in Sources */, EAF7F0AF289B144C00B287F5 /* UnderlineLabelAttribute.swift in Sources */, EAC925842911C63100091998 /* Colorable.swift in Sources */, EA3361C5289030FC0071C351 /* Accessable.swift in Sources */, @@ -774,10 +795,12 @@ EAA5EEB528ECBFB4003B3210 /* ImageLabelAttribute.swift in Sources */, EAB5FF0129424ACB00998C17 /* UIControl.swift in Sources */, EAB1D2E628AE842000DAE764 /* Publisher+Bind.swift in Sources */, + EA985BF5296C60C000F2FF2E /* Icon.swift in Sources */, EA3361AA288B25E40071C351 /* Disabling.swift in Sources */, EA3361B6288B2A410071C351 /* Control.swift in Sources */, 5F21D7BF28DCEB3D003E7CD6 /* Useable.swift in Sources */, EAF7F0B7289C12A600B287F5 /* UITapGestureRecognizer.swift in Sources */, + EA985BF9296C710100F2FF2E /* IconColor.swift in Sources */, EAB5FED429267EB300998C17 /* UIView.swift in Sources */, EA3361AD288B26190071C351 /* DataTrackable.swift in Sources */, EA33623E2892EE950071C351 /* UIDevice.swift in Sources */, @@ -785,6 +808,7 @@ EAF7F0AD289B142900B287F5 /* StrikeThroughLabelAttribute.swift in Sources */, EAB5FEF12927F4AA00998C17 /* SelfSizingCollectionView.swift in Sources */, EA3361B8288B2AAA0071C351 /* ViewProtocol.swift in Sources */, + EA985BFB296C78D500F2FF2E /* IconCategory.swift in Sources */, EA3361BF288B2EA60071C351 /* Handlerable.swift in Sources */, EA3361A8288B23300071C351 /* UIColor.swift in Sources */, EAC9257D29119B5400091998 /* TextLink.swift in Sources */, diff --git a/VDS/Components/Icon/Icon.swift b/VDS/Components/Icon/Icon.swift new file mode 100644 index 00000000..618282f0 --- /dev/null +++ b/VDS/Components/Icon/Icon.swift @@ -0,0 +1,154 @@ +// +// Icon.swift +// VDS +// +// Created by Matt Bruce on 1/9/23. +// + +import Foundation +import UIKit +import VDSColorTokens +import Combine + +public enum IconSize: String, CaseIterable { + case xsmall + case small + case medium + case large + case XLarge + + public var dimensions: CGSize { + switch self { + + case .xsmall: + return .init(width: 12, height: 12) + + case .small: + return .init(width: 16, height: 16) + + case .medium: + return .init(width: 20, height: 20) + + case .large: + return .init(width: 24, height: 24) + + case .XLarge: + return .init(width: 28, height: 28) + + } + } +} + +@objc(VDSIcon) +public class Icon: View { + + //-------------------------------------------------- + // MARK: - Private Properties + //-------------------------------------------------- + private var widthConstraint: NSLayoutConstraint? + private var heightConstraint: NSLayoutConstraint? + + private var imageView = UIImageView().with { + $0.translatesAutoresizingMaskIntoConstraints = false + $0.contentMode = .scaleAspectFill + $0.clipsToBounds = true + } + + //-------------------------------------------------- + // MARK: - Public Properties + //-------------------------------------------------- + open var color: IconColor = .black { didSet { didChange() }} + open var size: IconSize = .medium { didSet { didChange() }} + open var name: IconName? { didSet { didChange() }} + + //reserverd for internal components only + internal var restrictedName: RestrictedIconName? { didSet { didChange() }} + internal var isBold: Bool = false { didSet { didChange() }} + + //functions + //-------------------------------------------------- + // MARK: - Lifecycle + //-------------------------------------------------- + + open override func setup() { + super.setup() + + addSubview(imageView) + imageView.pinToSuperView() + + heightConstraint = imageView.heightAnchor.constraint(equalToConstant: size.dimensions.height) + heightConstraint?.isActive = true + widthConstraint = imageView.widthAnchor.constraint(equalToConstant: size.dimensions.width) + widthConstraint?.isActive = true + + backgroundColor = .clear + } + + public override func reset() { + super.reset() + color = .black + imageView.image = nil + } + + //-------------------------------------------------- + // MARK: - State + //-------------------------------------------------- + open override func updateView() { + super.updateView() + + //get the color for the image + var imageColor = color.value + + //ensure the correct color for white/black colors + if surface == .dark && color == IconColor.black { + imageColor = VDSColor.elementsPrimaryOndark + } else if surface == .light && color == IconColor.black { + imageColor = VDSColor.elementsPrimaryOnlight + } + + //set the icon dimensions + let dimensions = size.dimensions + heightConstraint?.constant = dimensions.height + widthConstraint?.constant = dimensions.width + + //get the image name + //set the image + if let restrictedName, let image = getImage(for: restrictedName.rawValue) { + setImage(image: image, imageColor: imageColor) + + } else if let name, let image = getImage(for: name.rawValue) { + setImage(image: image, imageColor: imageColor) + } else { + imageView.image = nil + } + } + + private func getImage(for imageName: String) -> UIImage? { + if !imageName.hasPrefix("pagination"), isBold { + let boldIconName = "\(imageName)-bold" + if let image = UIImage(named: boldIconName, in: Bundle(for: Self.self), with: nil) { + return image + + } else if let image = UIImage(named: boldIconName) { + return image + + } else if let image = UIImage(named: imageName) { + return image + } + } else { + if let image = UIImage(named: imageName, in: Bundle(for: Self.self), with: nil) { + return image + + } else if let image = UIImage(named: imageName) { + return image + } + } + + return nil + } + + private func setImage(image: UIImage, imageColor: UIColor) { + imageView.image = image.withTintColor(imageColor) + } +} + diff --git a/VDS/Components/Icon/IconCategory.swift b/VDS/Components/Icon/IconCategory.swift new file mode 100644 index 00000000..037f8253 --- /dev/null +++ b/VDS/Components/Icon/IconCategory.swift @@ -0,0 +1,66 @@ +// +// IconCategory.swift +// VDS +// +// Created by Matt Bruce on 1/9/23. +// + +import Foundation + +public enum IconCategory: String, CaseIterable { + case accessibility + case b2b + case directional + case international + case navigational + case notification_feedback + case objects_industry + case orders_pricing + case other + case plans_devices + case social + case utilities +} + +extension IconCategory { + public var icons: [IconName] { + switch self { + + case .accessibility: + return [.accessibility, .americanSignLanguage, .assistedListeningSystems, .audioDescription, .blind, .braille, .brightness, .closedCaptioning, .closedCaptioningFill, .cognitiveDisability, .deaf, .internationalSymbolOfAccess, .openCaptioning, .phoneVolume, .teletype, .textToSpeech] + + case .b2b: + return [.assetTracking, .businessContinuity, .conditionBasedMaintenance, .conditionBasedWrench, .constructionHammer, .constructionTruck, .digitalSignageCar, .digitalSignage, .droneCamera, .educationCurriculum, .education, .electricPower, .electricUtility, .energyScience, .energyUtilities, .enterprise, .federalDefense, .financial, .fleetTracking, .fleet, .gas, .government, .group, .growth, .hackers, .healthcareCorporate, .healthcareGeneral, .healthcareWorker, .ideasSolutions, .inclusivity, .industry, .insurance, .intelligentTracking, .internetOfThings, .joinCall, .k12Education, .laptopAntivirus, .laptopControls, .laptopGpsTracking, .laptopSettings, .laptopTrends, .laptopWireless, .law, .lmr, .loyaltyRetention, .manufacturing, .mediaEntertainment, .mediumBusiness, .mobileCommandCenter, .mobileKioskInfo, .mobileKioskWireless, .mobileRetail, .mobileSearch, .mobileWorkforceManagement, .network, .networkAttachedStorage, .officePhoneSystem, .oilIndustry, .operationalTransformation, .pharmaceutical, .pharmacy, .planner, .powerUtility, .professionalServices, .qualityAssurance, .realEstate, .regulatoryCompliance, .research, .retail, .security, .securitySolution, .smarthouse, .socialMedia, .software, .solarPower, .solutions, .supplyChain, .systemIntegration, .telecommunications, .telemedicine, .telemetry, .thermodynamics, .trends, .utilityWorker, .vehicleTracking, .warehouseManagement, .waterIndustry, .wellness] + + case .directional: + return [.upCaret, .closeAlt, .close, .downArrow, .downCaret, .evenMoreFlexibility, .flexibilityRectangles, .flexibility, .gateway, .leftArrow, .leftCaret, .minus, .moreFlexibility, .noOff, .no, .plus, .rightArrow, .rightCaret, .swipeLeft, .swipeRight, .swipe, .switch, .upArrow] + + case .international: + return [.internationalLongDistance, .international, .travelPass, .tripPlanner] + + case .navigational: + return [.advancedSettings, .agentChat, .bookmark, .chat, .filterOff, .filter, .list, .lockClosed, .lockOpen, .logout, .menu, .moreHorizontal, .myAccount, .realTimeTracking, .search, .settings, .supportDrawer, .support, .userRegistration] + + case .notification_feedback: + return [.alertNotification, .checkmarkAlt, .checkmark, .clock, .error, .feedback, .loader, .notification, .notificationsOff, .notifyMe, .pushNotification, .remindMe, .reminder, .securityAlert, .securityCheck, .securityKeyhole, .securityWireless, .snooze, .speedMonitoring, .starOff, .star, .sync, .timer, .warning] + + case .objects_industry: + return [.ctr, .passenger, .tvContent, .urlTransparency, .adaptiveSpeaker, .adTechStack, .agricultureLeaves, .agricultureTractor, .agricultureVineyard, .airport, .airConditioner, .audienceTargetedSearch, .award, .babyMonitor, .bestPractices, .bid, .bot, .cellTower, .cloudDocument, .coffee, .coin, .complianceDocument, .conversion, .countDown, .crossDeviceTargeting, .crossDevice, .customAudience, .digitalContent, .dining, .display, .domainTargeting, .doorbell, .driver, .euro, .expense, .faceCovering, .fineArt, .flag, .flurry, .fridge, .gaming, .geofence, .home, .identityGraph, .impressionVideo, .inferredIdentity, .irobot, .ironingBoard, .kidsStroller, .levers, .mobilePlusTv, .mobileRetargeting, .motionDetector, .multipleDocuments, .music, .nativeVideo, .native, .onGoCar, .packBackpack, .packLuggage, .packPurse, .petsCollar, .realTime, .research, .retailStore, .retargeting, .schoolNotebook, .singleDocument, .smartFamilyChildAddressBook, .smartScooter, .smokeDetector, .solarPanel, .sportsBike, .sportsSkis, .sportsSoccer, .sportsTennis, .stadiumAlt, .stadiumFlag, .thermostatTech, .ticket, .tradingDeck, .traffic, .travelKeys, .trumpet, .unification, .unification, .visibility, .weights, .yield] + + case .orders_pricing: + return [.addToFavorite, .addedToFavorite, .billDown, .billUp, .camera, .creditCard, .gift, .inStorePickup, .noFee, .oneYear, .orders, .outOfStock, .reoccuringPayment, .reservations, .returns, .rewards, .shipping, .shoppingBag, .shopping, .tag, .taxes] + case .other: + return [.growthOpportunities, .noSmoking, .socialDistancing] + + case .plans_devices: + return [.battery, .bonusData, .bringYourOwnDevice, .callerId, .carryoverData, .compass, .connect, .dataBoost, .deviceProtection, .devicesAddons, .embeddedSound, .findMyRemote, .giftedData, .homeInternet, .internetDevices, .largePlan, .mediumPlan, .mobileApps, .mobileHotspot, .multipleDeviceProtection, .multipleDevices, .nationWide, .phoneAlt, .purchaseData, .router, .simCard, .smallPlan, .smartAssistant, .sound, .tablet, .techLaptop, .techPhone , .totalMobileProtection, .unlimitedPlan, .uplink, .videoOnTablet, .waterResistant, .wearable] + + case .social: + return [.at, .facebook, .instagram, .twitter, .youtube] + + case .utilities: + return [.ThreeDAd , .ar , .addFolder , .addUser , .analytics , .announcement , .archive , .artboard , .attach , .awareness , .barcode , .bluetooth , .boxOpen , .calendar , .calibrate , .callDisconnected , .cleanSurface , .cloudAlt , .cloud , .comparison , .compose , .connectParts , .consultativeTransfer , .convergence , .crop , .cta , .customize , .data , .decrease , .deviceActivity , .directCarrierBilling , .directory , .displayUtilities , .distribution , .download , .dragAndDrop , .dropShipment , .duplicate , .edit , .email , .emergencyContact , .emoji , .externalLink , .fallDetected , .favorite , .fax , .fingerprintSensor , .fire , .fitToZone , .flipCamera , .forwardedCall , .fullscreen , .getHelp , .gridView , .history , .humidity , .incomingCall , .increase , .info , .inventory , .invitationAccepted , .invitationExpired , .invitationRejected , .landscape , .light , .link , .location , .locationPin , .mapView , .masonryView , .maximize , .mergeCalls , .microphoneAlt , .microphone , .missedCall , .moveTo , .multicast , .mute , .networkConnection , .news , .next , .nfcTag , .night , .noVideo , .onDemand , .outgoingCall , .paperFreeBilling , .pauseInternet , .pause , .peelSticker , .photo , .platform , .playAlt , .playWith , .play , .portrait , .pressure , .previous , .print , .question , .recycle , .removeItem , .replaceAPhoto , .reply , .ringing , .ringtone , .riskMonitor , .rss , .satelliteOff , .satellite , .save , .scaleAlt , .scale , .sendMessage , .setFallbackImage , .setGalleryImage , .share , .shock , .signalBroadcast , .speakerMute , .speakerPhone , .speed , .stakeholder , .steps , .stop , .stopAlt , .survey , .talking , .teamLeader , .temperature , .template , .theme , .thumbsDown , .thumbsUp , .tiles , .tilt , .tools , .trash , .turnonOff , .tv , .upload , .userSettings , .vibration , .video , .volume , .volunteer , .virtualReality , .voiceHd , .voiceMail , .weather , .whiteBlackList , .wifi , .zoomIn , .zoomOut] + + } + } +} diff --git a/VDS/Components/Icon/IconColor.swift b/VDS/Components/Icon/IconColor.swift new file mode 100644 index 00000000..49f8d85d --- /dev/null +++ b/VDS/Components/Icon/IconColor.swift @@ -0,0 +1,90 @@ +// +// IconColor.swift +// VDS +// +// Created by Matt Bruce on 1/9/23. +// + +import Foundation +import VDSColorTokens +import UIKit + +public enum IconColor: String, CaseIterable { + case black + case white + case red + case gray95 + case gray85 + case gray65 + case gray44 + case gray20 + case gray11 + case orange91 + case orange46 + case orange39 + case orange15 + case yellow94 + case yellow62 + case yellow20 + case blue91 + case blue45 + case blue35 + case blue13 + case green89 + case green34 + case green26 + case green11 + + public var value: UIColor { + switch self { + case .black: + return VDSColor.paletteBlack + case .white: + return VDSColor.paletteWhite + case .red: + return VDSColor.paletteRed + case .gray95: + return VDSColor.paletteGray95 + case .gray85: + return VDSColor.paletteGray85 + case .gray65: + return VDSColor.paletteGray65 + case .gray44: + return VDSColor.paletteGray44 + case .gray20: + return VDSColor.paletteGray20 + case .gray11: + return VDSColor.paletteGray11 + case .orange91: + return VDSColor.paletteOrange91 + case .orange46: + return VDSColor.paletteOrange46 + case .orange39: + return VDSColor.paletteOrange39 + case .orange15: + return VDSColor.paletteOrange15 + case .yellow94: + return VDSColor.paletteYellow94 + case .yellow62: + return VDSColor.paletteYellow62 + case .yellow20: + return VDSColor.paletteYellow20 + case .blue91: + return VDSColor.paletteBlue91 + case .blue45: + return VDSColor.paletteBlue45 + case .blue35: + return VDSColor.paletteBlue35 + case .blue13: + return VDSColor.paletteBlue13 + case .green89: + return VDSColor.paletteGreen89 + case .green34: + return VDSColor.paletteGreen34 + case .green26: + return VDSColor.paletteGreen26 + case .green11: + return VDSColor.paletteGreen11 + } + } +} diff --git a/VDS/Components/Icon/IconName.swift b/VDS/Components/Icon/IconName.swift new file mode 100644 index 00000000..92397f6b --- /dev/null +++ b/VDS/Components/Icon/IconName.swift @@ -0,0 +1,531 @@ +// +// IconName.swift +// VDS +// +// Created by Matt Bruce on 1/9/23. +// + +import Foundation +import UIKit +import VDSColorTokens + +public enum IconName: String, CaseIterable { + //accessibility + case accessibility = "accessibility" + case americanSignLanguage = "american-sign-language" + case assistedListeningSystems = "assisted-listening-systems" + case audioDescription = "audio-description" + case blind = "blind" + case braille = "braille" + case brightness = "brightness" + case closedCaptioning = "closed-captioning" + case closedCaptioningFill = "closed-captioning-fill" + case cognitiveDisability = "cognitive-disability" + case deaf = "deaf" + case internationalSymbolOfAccess = "international-symbol-of-access" + case openCaptioning = "open-captioning" + case phoneVolume = "phone-volume" + case teletype = "teletype" + case textToSpeech = "text-to-speech" + + //b2b + case assetTracking = "asset-tracking" + case businessContinuity = "business-continuity" + case conditionBasedMaintenance = "condition-based-maintenance" + case conditionBasedWrench = "condition-based-wrench" + case constructionHammer = "construction-hammer" + case constructionTruck = "construction-truck" + case digitalSignageCar = "digital-signage-car" + case digitalSignage = "digital-signage" + case droneCamera = "drone-camera" + case educationCurriculum = "education-curriculum" + case education = "education" + case electricPower = "electric-power" + case electricUtility = "electric-utility" + case energyScience = "energy-science" + case energyUtilities = "energy-utilities" + case enterprise = "enterprise" + case federalDefense = "federal-defense" + case financial = "financial" + case fleetTracking = "fleet-tracking" + case fleet = "fleet" + case gas = "gas" + case government = "government" + case group = "group" + case growth = "growth" + case hackers = "hackers" + case healthcareCorporate = "healthcare-corporate" + case healthcareGeneral = "healthcare-general" + case healthcareWorker = "healthcare-worker" + case ideasSolutions = "ideas-solutions" + case inclusivity = "inclusivity" + case industry = "industry" + case insurance = "insurance" + case intelligentTracking = "intelligent-tracking" + case internetOfThings = "internet-of-things" + case joinCall = "join-call" + case k12Education = "k12-education" + case laptopAntivirus = "laptop-antivirus" + case laptopControls = "laptop-controls" + case laptopGpsTracking = "laptop-gps-tracking" + case laptopSettings = "laptop-settings" + case laptopTrends = "laptop-trends" + case laptopWireless = "laptop-wireless" + case law = "law" + case lmr = "lmr" + case loyaltyRetention = "loyalty-retention" + case manufacturing = "manufacturing" + case mediaEntertainment = "media-entertainment" + case mediumBusiness = "medium-business" + case mobileCommandCenter = "mobile-command-center" + case mobileKioskInfo = "mobile-kiosk-info" + case mobileKioskWireless = "mobile-kiosk-wireless" + case mobileRetail = "mobile-retail" + case mobileSearch = "mobile-search" + case mobileWorkforceManagement = "mobile-workforce-management" + case network = "network" + case networkAttachedStorage = "network-attached-storage" + case officePhoneSystem = "office-phone-system" + case oilIndustry = "oil-industry" + case operationalTransformation = "operational-transformation" + case pharmaceutical = "pharmaceutical" + case pharmacy = "pharmacy" + case planner = "planner" + case powerUtility = "power-utility" + case professionalServices = "professional-services" + case qualityAssurance = "quality-assurance" + case realEstate = "real-estate" + case regulatoryCompliance = "regulatory-compliance" + case retail = "retail" + case security = "security" + case securitySolution = "security-solution" + case smarthouse = "smarthouse" + case socialMedia = "social-media" + case software = "software" + case solarPower = "solar-power" + case solutions = "solutions" + case supplyChain = "supply-chain" + case systemIntegration = "system-integration" + case telecommunications = "telecommunications" + case telemedicine = "telemedicine" + case telemetry = "telemetry" + case thermodynamics = "thermodynamics" + case trends = "trends" + case utilityWorker = "utility-worker" + case vehicleTracking = "vehicle-tracking" + case warehouseManagement = "warehouse-management" + case waterIndustry = "water-industry" + case wellness = "wellness" + + //directional + case upCaret = "up-caret" + case closeAlt = "close-alt" + case close = "close" + case downArrow = "down-arrow" + case downCaret = "down-caret" + case evenMoreFlexibility = "even-more-flexibility" + case flexibilityRectangles = "flexibility-rectangles" + case flexibility = "flexibility" + case gateway = "gateway" + case leftArrow = "left-arrow" + case leftCaret = "left-caret" + case minus = "minus" + case moreFlexibility = "more-flexibility" + case noOff = "no-off" + case no = "no" + case plus = "plus" + case rightArrow = "right-arrow" + case rightCaret = "right-caret" + case swipeLeft = "swipe-left" + case swipeRight = "swipe-right" + case swipe = "swipe" + case `switch` = "switch" + case upArrow = "up-arrow" + + //international + case internationalLongDistance = "international-long-distance" + case international = "international" + case travelPass = "travel-pass" + case tripPlanner = "trip-planner" + + //navigational + case advancedSettings = "advanced-settings" + case agentChat = "agent-chat" + case bookmark = "bookmark" + case chat = "chat" + case filterOff = "filter-off" + case filter = "filter" + case list = "list" + case lockClosed = "lock-closed" + case lockOpen = "lock-open" + case logout = "logout" + case menu = "menu" + case moreHorizontal = "more-horizontal" + case myAccount = "my-account" + case realTimeTracking = "real-time-tracking" + case search = "search" + case settings = "settings" + case supportDrawer = "support-drawer" + case support = "support" + case userRegistration = "user-registration" + + //nofication_feedback + case alertNotification = "alert-notification" + case checkmarkAlt = "checkmark-alt" + case checkmark = "checkmark" + case clock = "clock" + case error = "error" + case feedback = "feedback" + case loader = "loader" + case notification = "notification" + case notificationsOff = "notifications-off" + case notifyMe = "notify-me" + case pushNotification = "push-notification" + case remindMe = "remind-me" + case reminder = "reminder" + case securityAlert = "security-alert" + case securityCheck = "security-check" + case securityKeyhole = "security-keyhole" + case securityWireless = "security-wireless" + case snooze = "snooze" + case speedMonitoring = "speed-monitoring" + case starOff = "star-off" + case star = "star" + case sync = "sync" + case timer = "timer" + case warning = "warning" + + //objects_industry + case ctr = "ctr" + case passenger = "passenger" + case tvContent = "tv-content" + case urlTransparency = "url-transparency" + case adaptiveSpeaker = "adaptive-speaker" + case adTechStack = "ad-tech-stack" + case agricultureLeaves = "agriculture-leaves" + case agricultureTractor = "agriculture-tractor" + case agricultureVineyard = "agriculture-vineyard" + case airport = "airport" + case airConditioner = "air-conditioner" + case audienceTargetedSearch = "audience-targeted-search" + case award = "award" + case babyMonitor = "baby-monitor" + case bestPractices = "best-practices" + case bid = "bid" + case bot = "bot" + case cellTower = "cell-tower" + case cloudDocument = "cloud-document" + case coffee = "coffee" + case coin = "coin" + case complianceDocument = "compliance-document" + case conversion = "conversion" + case countDown = "count-down" + case crossDeviceTargeting = "cross-device-targeting" + case crossDevice = "cross-device" + case customAudience = "custom-audience" + case digitalContent = "digital-content" + case dining = "dining" + case display = "display" + case domainTargeting = "domain-targeting" + case doorbell = "doorbell" + case driver = "driver" + case euro = "euro" + case expense = "expense" + case faceCovering = "face-covering" + case fineArt = "fine-art" + case flag = "flag" + case flurry = "flurry" + case fridge = "fridge" + case gaming = "gaming" + case geofence = "geofence" + case home = "home" + case identityGraph = "identity-graph" + case impressionVideo = "impression-video" + case inferredIdentity = "inferred-identity" + case irobot = "irobot" + case ironingBoard = "ironing-board" + case kidsStroller = "kids-stroller" + case levers = "levers" + case mobilePlusTv = "mobile-plus-tv" + case mobileRetargeting = "mobile-retargeting" + case motionDetector = "motion-detector" + case multipleDocuments = "multiple-documents" + case music = "music" + case nativeVideo = "native-video" + case native = "native" + case onGoCar = "on-go-car" + case packBackpack = "pack-backpack" + case packLuggage = "pack-luggage" + case packPurse = "pack-purse" + case petsCollar = "pets-collar" + case realTime = "real-time" + case research = "research" + case retailStore = "retail-store" + case retargeting = "retargeting" + case schoolNotebook = "school-notebook" + case singleDocument = "single-document" + case smartFamilyChildAddressBook = "smart-family-child-address-book" + case smartScooter = "smart-scooter" + case smokeDetector = "smoke-detector" + case solarPanel = "solar-panel" + case sportsBike = "sports-bike" + case sportsSkis = "sports-skis" + case sportsSoccer = "sports-soccer" + case sportsTennis = "sports-tennis" + case stadiumAlt = "stadium-alt" + case stadiumFlag = "stadium-flag" + case thermostatTech = "thermostat-tech" + case ticket = "ticket" + case tradingDeck = "trading-deck" + case traffic = "traffic" + case travelKeys = "travel-keys" + case trumpet = "trumpet" + case unification = "unification" + case visibility = "visibility" + case weights = "weights" + case yield = "yield" + + //orders_pricing + case addToFavorite = "add-to-favorite" + case addedToFavorite = "added-to-favorite" + case billDown = "bill-down" + case billUp = "bill-up" + case camera = "camera" + case creditCard = "credit-card" + case gift = "gift" + case inStorePickup = "in-store-pickup" + case noFee = "no-fee" + case oneYear = "one-year" + case orders = "orders" + case outOfStock = "out-of-stock" + case reoccuringPayment = "reoccuring-payment" + case reservations = "reservations" + case returns = "returns" + case rewards = "rewards" + case shipping = "shipping" + case shoppingBag = "shopping-bag" + case shopping = "shopping" + case tag = "tag" + case taxes = "taxes" + + //other + case growthOpportunities = "growth-opportunities" + case noSmoking = "no-smoking" + case socialDistancing = "social-distancing" + + //plans_other + case battery = "battery" + case bonusData = "bonus-data" + case bringYourOwnDevice = "bring-your-own-device" + case callerId = "caller-id" + case carryoverData = "carryover-data" + case compass = "compass" + case connect = "connect" + case dataBoost = "data-boost" + case deviceProtection = "device-protection" + case devicesAddons = "devices-addons" + case embeddedSound = "embedded-sound" + case findMyRemote = "find-my-remote" + case giftedData = "gifted-data" + case homeInternet = "home-internet" + case internetDevices = "internet-devices" + case largePlan = "large-plan" + case mediumPlan = "medium-plan" + case mobileApps = "mobile-apps" + case mobileHotspot = "mobile-hotspot" + case multipleDeviceProtection = "multiple-device-protection" + case multipleDevices = "multiple-devices" + case nationWide = "nation-wide" + case phoneAlt = "phone-alt" + case purchaseData = "purchase-data" + case router = "router" + case simCard = "sim-card" + case smallPlan = "small-plan" + case smartAssistant = "smart-assistant" + case sound = "sound" + case tablet = "tablet" + case techLaptop = "tech-laptop" + case techPhone = "tech-phone" + case totalMobileProtection = "total-mobile-protection" + case unlimitedPlan = "unlimited-plan" + case uplink = "uplink" + case videoOnTablet = "video-on-tablet" + case waterResistant = "water-resistant" + case wearable = "wearable" + + //social + case at = "at" + case facebook = "facebook" + case instagram = "instagram" + case twitter = "twitter" + case youtube = "youtube" + + //utilities + case ThreeDAd = "3d-ad" + case ar = "ar" + case addFolder = "add-folder" + case addUser = "add-user" + case analytics = "analytics" + case announcement = "announcement" + case archive = "archive" + case artboard = "artboard" + case attach = "attach" + case awareness = "awareness" + case barcode = "barcode" + case bluetooth = "bluetooth" + case boxOpen = "box-open" + case calendar = "calendar" + case calibrate = "calibrate" + case callDisconnected = "call-disconnected" + case cleanSurface = "clean-surface" + case cloudAlt = "cloud-alt" + case cloud = "cloud" + case comparison = "comparison" + case compose = "compose" + case connectParts = "connect-parts" + case consultativeTransfer = "consultative-transfer" + case convergence = "convergence" + case crop = "crop" + case cta = "cta" + case customize = "customize" + case data = "data" + case decrease = "decrease" + case deviceActivity = "device-activity" + case directCarrierBilling = "direct-carrier-billing" + case directory = "directory" + case displayUtilities = "display-utilities" + case distribution = "distribution" + case download = "download" + case dragAndDrop = "drag-and-drop" + case dropShipment = "drop-shipment" + case duplicate = "duplicate" + case edit = "edit" + case email = "email" + case emergencyContact = "emergency-contact" + case emoji = "emoji" + case externalLink = "external-link" + case fallDetected = "fall-detected" + case favorite = "favorite" + case fax = "fax" + case fingerprintSensor = "fingerprint-sensor" + case fire = "fire" + case fitToZone = "fit-to-zone" + case flipCamera = "flip-camera" + case forwardedCall = "forwarded-call" + case fullscreen = "fullscreen" + case getHelp = "get-help" + case gridView = "grid-view" + case history = "history" + case humidity = "humidity" + case incomingCall = "incoming-call" + case increase = "increase" + case info = "info" + case inventory = "inventory" + case invitationAccepted = "invitation-accepted" + case invitationExpired = "invitation-expired" + case invitationRejected = "invitation-rejected" + case landscape = "landscape" + case light = "light" + case link = "link" + case location = "location" + case locationPin = "location-pin" + case mapView = "map-view" + case masonryView = "masonry-view" + case maximize = "maximize" + case mergeCalls = "merge-calls" + case microphoneAlt = "microphone-alt" + case microphone = "microphone" + case missedCall = "missed-call" + case moveTo = "move-to" + case multicast = "multicast" + case mute = "mute" + case networkConnection = "network-connection" + case news = "news" + case next = "next" + case nfcTag = "nfc-tag" + case night = "night" + case noVideo = "no-video" + case onDemand = "on-demand" + case outgoingCall = "outgoing-call" + case paperFreeBilling = "paper-free-billing" + case pauseInternet = "pause-internet" + case pause = "pause" + case peelSticker = "peel-sticker" + case photo = "photo" + case platform = "platform" + case playAlt = "play-alt" + case playWith = "play-with" + case play = "play" + case portrait = "portrait" + case pressure = "pressure" + case previous = "previous" + case print = "print" + case question = "question" + case recycle = "recycle" + case removeItem = "remove-item" + case replaceAPhoto = "replace-a-photo" + case reply = "reply" + case ringing = "ringing" + case ringtone = "ringtone" + case riskMonitor = "risk-monitor" + case rss = "rss" + case satelliteOff = "satellite-off" + case satellite = "satellite" + case save = "save" + case scaleAlt = "scale-alt" + case scale = "scale" + case sendMessage = "send-message" + case setFallbackImage = "set-fallback-image" + case setGalleryImage = "set-gallery-image" + case share = "share" + case shock = "shock" + case signalBroadcast = "signal-broadcast" + case speakerMute = "speaker-mute" + case speakerPhone = "speaker-phone" + case speed = "speed" + case stakeholder = "stakeholder" + case steps = "steps" + case stop = "stop" + case stopAlt = "stop-alt" + case survey = "survey" + case talking = "talking" + case teamLeader = "team-leader" + case temperature = "temperature" + case template = "template" + case theme = "theme" + case thumbsDown = "thumbs-down" + case thumbsUp = "thumbs-up" + case tiles = "tiles" + case tilt = "tilt" + case tools = "tools" + case trash = "trash" + case turnonOff = "turnon-off" + case tv = "tv" + case upload = "upload" + case userSettings = "user-settings" + case vibration = "vibration" + case video = "video" + case volume = "volume" + case volunteer = "volunteer" + case virtualReality = "virtual-reality" + case voiceHd = "voice-hd" + case voiceMail = "voice-mail" + case weather = "weather" + case whiteBlackList = "white-black-list" + case wifi = "wifi" + case zoomIn = "zoom-in" + case zoomOut = "zoom-out" +} + +internal enum RestrictedIconName: String, CaseIterable { + case paginationLeftArrow = "pagination-left-arrow" + case paginationRightArrow = "pagination-right-arrow" + case checkmark = "checkmark" + case checkmarkAlt = "checkmark-alt" + case close = "close" + case error = "error" + case info = "info" + case leftCaret = "left-caret" + case rightCaret = "right-caret" + case warning = "warning" +}