<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0">

<channel>
	<title>Chris Rouse | Salesforce</title>
	<atom:link href="https://chrisrouse.us/feed/" rel="self" type="application/rss+xml"/>
	<link>https://chrisrouse.us</link>
	<description>Salesforce Consultant and Flow Nerd</description>
	<lastBuildDate>Sat, 17 May 2025 20:53:04 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
<site xmlns="com-wordpress:feed-additions:1">222873971</site>	<xhtml:meta content="noindex" name="robots" xmlns:xhtml="http://www.w3.org/1999/xhtml"/><item>
		<title>Multi Email Input LWC</title>
		<link>https://chrisrouse.us/multi-email-input-lwc/</link>
		
		<dc:creator><![CDATA[Chris Rouse]]></dc:creator>
		<pubDate>Sat, 17 May 2025 20:50:22 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[lwc]]></category>
		<category><![CDATA[salesforce]]></category>
		<category><![CDATA[salesforce email]]></category>
		<category><![CDATA[screen flow]]></category>
		<category><![CDATA[send better email]]></category>
		<guid isPermaLink="false">https://chrisrouse.us/?p=413</guid>

					<description><![CDATA[How do you capture multiple emails? Just a text input and hope that your end users format everything properly so that you can use a formula and a loop to parse the text, right? Yeah, I&#8217;ve done that too. It&#8217;s no fun! During a recent project I was once again faced with this requirement: We [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>How do you capture multiple emails? Just a text input and hope that your end users format everything properly so that you can use a formula and a loop to parse the text, right? Yeah, I&#8217;ve done that too. It&#8217;s no fun!</p>



<p>During a recent project I was once again faced with this requirement: <em>We want people using the form to be able to add CC email addresses to the case. </em>I didn&#8217;t want to build the same clunky solution to capture email addresses where we have little control over the input.</p>



<p>I wanted to see if I could use AI to build a solution for this since I couldn&#8217;t find one. I was really surprised that this didn&#8217;t already exist as a component on unofficialsf.com! It&#8217;s a feature that seems so obvious for capturing email addresses in a form.</p>



<p>Heads up: there are a lot of media in this post to show all of the functionality. If you&#8217;re reading this on your phone, you may want to save it for later and check it out on your computer.</p>



<h2 class="wp-block-heading">Install</h2>



<p><a href="https://test.salesforce.com/packaging/installPackage.apexp?p0=04tHo000000tCz0IAE" target="_blank" rel="noreferrer noopener">Sandbox</a></p>



<p><a href="https://login.salesforce.com/packaging/installPackage.apexp?p0=04tHo000000tCz0IAE" target="_blank" rel="noreferrer noopener">Production</a></p>



<p>Easy method: copy and paste this after your org URL to run the installer. <code>packaging/installPackage.apexp?p0=04tHo000000tCz0IAE</code></p>



<p><a href="https://github.com/chrisrouse/multiEmailInput" target="_blank" rel="noreferrer noopener">Github</a></p>



<h2 class="wp-block-heading">The basics</h2>



<p>Multi Email Input is an LWC that works in screenflows. After installing the package, you can find the LWC in the Custom section of a Screen.</p>



<p>Entering email addresses is as easy typing them in! Pressing the return, space, or tab key after typing and address will add it to your list. It also supports copying and pasting lists, which will be shown later.</p>



<figure class="wp-block-video"><video height="714" style="aspect-ratio: 792 / 714;" width="792" controls muted src="https://chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-06-05.mp4" playsinline></video></figure>



<p>Email inputs are stored in a collection and as text so that you have flexibility with using the outputs. I specifically designed the outputs to work with the Send Email action in a flow.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="1024" height="345" src="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_15-21-01.jpg?resize=1024%2C345&#038;ssl=1" alt="" class="wp-image-416" srcset="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_15-21-01.jpg?resize=1024%2C345&amp;ssl=1 1024w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_15-21-01.jpg?resize=300%2C101&amp;ssl=1 300w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_15-21-01.jpg?resize=768%2C259&amp;ssl=1 768w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_15-21-01.jpg?resize=1536%2C518&amp;ssl=1 1536w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_15-21-01.jpg?w=1572&amp;ssl=1 1572w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<h2 class="wp-block-heading">Flow Settings</h2>



<p>There are quite a few settings available for this component! For most settings I have included an input for a custom error message that overrides the default message that is included in the component. </p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img data-recalc-dims="1" decoding="async" width="624" height="948" data-id="417" src="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-07-17.jpg?resize=624%2C948&#038;ssl=1" alt="" class="wp-image-417" srcset="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-07-17.jpg?w=624&amp;ssl=1 624w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-07-17.jpg?resize=197%2C300&amp;ssl=1 197w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" decoding="async" width="630" height="970" data-id="418" src="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-07-38.jpg?resize=630%2C970&#038;ssl=1" alt="" class="wp-image-418" srcset="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-07-38.jpg?w=630&amp;ssl=1 630w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-07-38.jpg?resize=195%2C300&amp;ssl=1 195w" sizes="(max-width: 630px) 100vw, 630px" /></figure>
</figure>



<h2 class="wp-block-heading">Allowed Domains</h2>



<p>Allowed domains gives you the ability to restrict your domains to just the ones you want to allow. If you&#8217;re creating this form for internal users, you may want to require that they use a specific email domain only. Allowed Domains also supports wild cards, so if you have a variety of internal domains that have slightly different formatting, you can use wildcards to make this easier to use.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="628" height="128" data-id="419" src="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-09-36.jpg?resize=628%2C128&#038;ssl=1" alt="" class="wp-image-419" srcset="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-09-36.jpg?w=628&amp;ssl=1 628w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-09-36.jpg?resize=300%2C61&amp;ssl=1 300w" sizes="auto, (max-width: 628px) 100vw, 628px" /></figure>
</figure>



<figure class="wp-block-video"><video height="238" style="aspect-ratio: 792 / 238;" width="792" controls muted src="https://chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-10-51-1.mp4" playsinline></video></figure>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="624" height="248" src="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-11-33.jpg?resize=624%2C248&#038;ssl=1" alt="" class="wp-image-422" srcset="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-11-33.jpg?w=624&amp;ssl=1 624w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-11-33.jpg?resize=300%2C119&amp;ssl=1 300w" sizes="auto, (max-width: 624px) 100vw, 624px" /></figure>



<figure class="wp-block-video"><video height="322" style="aspect-ratio: 794 / 322;" width="794" controls src="https://chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-12-11.mp4" playsinline></video></figure>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="618" height="252" src="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-18-02.jpg?resize=618%2C252&#038;ssl=1" alt="" class="wp-image-424" srcset="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-18-02.jpg?w=618&amp;ssl=1 618w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-18-02.jpg?resize=300%2C122&amp;ssl=1 300w" sizes="auto, (max-width: 618px) 100vw, 618px" /></figure>



<figure class="wp-block-video"><video height="232" style="aspect-ratio: 794 / 232;" width="794" controls src="https://chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-18-49-1.mp4" playsinline></video></figure>



<h2 class="wp-block-heading">Blocked Domains</h2>



<p>Want to block domains or domains from certain countries? Maybe you don&#8217;t want to allow domains from certain free domains, you could enter those into this field to block those from being entered.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="624" height="246" src="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-12-57.jpg?resize=624%2C246&#038;ssl=1" alt="" class="wp-image-427" srcset="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-12-57.jpg?w=624&amp;ssl=1 624w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-12-57.jpg?resize=300%2C118&amp;ssl=1 300w" sizes="auto, (max-width: 624px) 100vw, 624px" /></figure>



<figure class="wp-block-video"><video height="228" style="aspect-ratio: 798 / 228;" width="798" controls src="https://chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-13-45.mp4"></video></figure>



<h2 class="wp-block-heading">Disabled</h2>



<p>This value can be controlled by a formula so that it only shows if the value equals true. Maybe you need other fields completed before allowing someone to enter multiple emails. Create a formula that handles that and only makes the field active once a certain criteria met.</p>



<h2 class="wp-block-heading">Duplicate Email Error Message, Help Text, Invalid Email Error Message, Label</h2>



<p>If you want to replace any of these error messages, you can enter a custom message in these fields. Otherwise the default message will be shown.</p>



<h2 class="wp-block-heading">Maximum Emails</h2>



<p>Enter a number between 1 and 150 if you need to limit how many addresses can be entered. The 150 max limit comes from Salesforce&#8217;s current limit on the Send Email flow action.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="612" height="252" src="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-24-06.jpg?resize=612%2C252&#038;ssl=1" alt="" class="wp-image-429" srcset="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-24-06.jpg?w=612&amp;ssl=1 612w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-24-06.jpg?resize=300%2C124&amp;ssl=1 300w" sizes="auto, (max-width: 612px) 100vw, 612px" /></figure>



<figure class="wp-block-video"><video height="250" style="aspect-ratio: 792 / 250;" width="792" controls src="https://chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-25-06.mp4"></video></figure>



<h2 class="wp-block-heading">Placeholder Text, Required, Value</h2>



<p>If you need to show a custom placeholder, replace this value. You can also make the component required if necessary. Value is used to prefill addresses. If you want to use email addresses from earlier in your flow, you can put in that resources here. Validation rules from other settings will apply when the flow runs.</p>



<h2 class="wp-block-heading">Enter emails with copy/paste</h2>



<p>Do you have a bunch of email addresses that you want to copy into the form? Maybe you&#8217;re copying a list of emails from gmail or some other email app. That works! </p>



<figure class="wp-block-video"><video height="862" style="aspect-ratio: 798 / 862;" width="798" controls src="https://chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-27-11.mp4"></video></figure>



<figure class="wp-block-video"><video height="326" style="aspect-ratio: 788 / 326;" width="788" controls src="https://chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-33-22.mp4"></video></figure>



<figure class="wp-block-video"><video height="410" style="aspect-ratio: 790 / 410;" width="790" controls src="https://chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-34-01.mp4"></video></figure>



<h2 class="wp-block-heading">SLDS 2 ready</h2>



<p>Multi Email is ready to go as soon as you upgrade to an SLDS 2 theme!</p>



<figure class="wp-block-video"><video height="430" style="aspect-ratio: 934 / 430;" width="934" controls src="https://chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-40-05.mp4"></video></figure>
]]></content:encoded>
					
		
		<enclosure length="686911" type="video/mp4" url="https://chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-06-05.mp4"/>
<enclosure length="54798" type="video/mp4" url="https://chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-10-51-1.mp4"/>
<enclosure length="55562" type="video/mp4" url="https://chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-12-11.mp4"/>
<enclosure length="110442" type="video/mp4" url="https://chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-18-49-1.mp4"/>
<enclosure length="79481" type="video/mp4" url="https://chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-13-45.mp4"/>
<enclosure length="101964" type="video/mp4" url="https://chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-25-06.mp4"/>
<enclosure length="479795" type="video/mp4" url="https://chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-27-11.mp4"/>
<enclosure length="384316" type="video/mp4" url="https://chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-33-22.mp4"/>
<enclosure length="87398" type="video/mp4" url="https://chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-34-01.mp4"/>
<enclosure length="434774" type="video/mp4" url="https://chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-17_13-40-05.mp4"/>

		<post-id xmlns="com-wordpress:feed-additions:1">413</post-id>	</item>
		<item>
		<title>sf tabs browser extension</title>
		<link>https://chrisrouse.us/sf-tabs-browser-extension/</link>
		
		<dc:creator><![CDATA[Chris Rouse]]></dc:creator>
		<pubDate>Tue, 13 May 2025 13:25:42 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[salesforce]]></category>
		<category><![CDATA[salesforce chrome]]></category>
		<category><![CDATA[salesforce firefox]]></category>
		<category><![CDATA[sf tabs]]></category>
		<category><![CDATA[sf tabs chrome]]></category>
		<category><![CDATA[sf tabs firefox]]></category>
		<guid isPermaLink="false">https://chrisrouse.us/?p=377</guid>

					<description><![CDATA[A couple years ago an extension called &#8220;Why, Salesforce?&#8221; came on the scene to answer one question: Why can&#8217;t I add tabs to Setup in Salesforce? Warren Walters made the lives of Salesforce admins and consultants so much easier! The plugin was great, but Warren is a busy guy and his focus has understandably been [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>A couple years ago an extension called &#8220;Why, Salesforce?&#8221; came on the scene to answer one question: Why can&#8217;t I add tabs to Setup in Salesforce? Warren Walters made the lives of Salesforce admins and consultants so much easier!</p>



<p>The plugin was great, but Warren is a busy guy and his focus has understandably been on his other projects, like his Salesforce Developer course. There were quite a few outstanding feature requests from users and from his own personal list that had been lingering for some time. I thought about just working on some updates to this plugin, but I knew that I wanted to totally overhaul it with a new UI and new functionality, so it made more sense to build a new plugin.</p>



<p></p>



<div class="wp-block-media-text has-media-on-the-right is-stacked-on-mobile is-vertically-aligned-center"><div class="wp-block-media-text__content">
<p>And by build, I mean <s>vibe code</s> prompt engineering. </p>
</div><figure class="wp-block-media-text__media"><img data-recalc-dims="1" loading="lazy" decoding="async" width="480" height="288" src="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/vibecode.gif?resize=480%2C288&#038;ssl=1" alt="" class="wp-image-379 size-full"/></figure></div>



<p></p>



<p>I fired up Claude and went to work. I started from a blank slate and started guiding the build process. Rather than give all my instructions at once, I started small. I added one feature at a time so that I could track changes in github and keep an eye on the plugin to make sure it was working properly.</p>



<p>It was a lot of work! Claude generally did a really good job not messing things up when I added new features, but it did get stuck a few times. When that happened, ChatGPT was able to clarify a fix and then I could get back to using Claude. </p>



<p>I&#8217;m really proud of what I was able to achieve with <em>sf tabs</em> and how robust all the features feel. There are still some quirks with a couple features that depend on Salesforce, like setting the active tab styling, but everything else is really solid.</p>



<h2 class="wp-block-heading">Install</h2>



<p><em>sf tabs</em> is available for <a href="https://addons.mozilla.org/en-US/firefox/addon/sf-tabs/?utm_source=addons.mozilla.org&amp;utm_medium=referral&amp;utm_content=search" target="_blank" rel="noreferrer noopener">Firefox</a> and for <a href="https://chromewebstore.google.com/detail/sf-tabs/lkimhffllnjkacnhjfehaihcjilcmdlo" target="_blank" rel="noreferrer noopener">Chrome</a>. It will also soon be available for Edge. There are no plans to make it available for Safari unless someone wants to sponsor the $99/year developer fee. If you are already an Apple developer, the code is open source on <a href="https://github.com/chrisrouse/sftabs" target="_blank" rel="noreferrer noopener">github</a> and you can fork it to release it for Safari if you want to release a version.</p>



<p>On Chrome, if you have configured <strong>Enhanced protection</strong> (Settings > Privacy and security > Security), you may see a warning when you try to install the plugin. This is automatic in Chrome for new plugins. The plugin is safe to install!</p>



<h2 class="wp-block-heading">After Installing</h2>



<p>When you first install <em>sf tabs</em> you will have a default list of tabs: Flows, Installed Packages, Users, Profiles, Permission Sets. You will also need to grant permission for the plugin to run on each Salesforce instance you use since it is access information about tabs and browser storage.</p>


<div class="wp-block-image is-style-default">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/Screenshot-2025-05-13-at-8.44.58%E2%80%AFAM.png?fit=822%2C858&amp;ssl=1" alt="" class="wp-image-385" style="width:400px"/></figure>
</div>


<h2 class="wp-block-heading">Adding Tabs</h2>



<p>There are two ways to add a new tab to the plugin. The first is my favorite feature in the plugin: Quick Add. Click on the cloud with the lightning bolt and instantly get a new tab!</p>



<p>The second method is by clicking on the plus button and manually adding the name and URL that you need. For <em>sf tabs</em>, you only need to include the page slug. Quick Add handles this for you so that you don&#8217;t get it wrong.</p>



<div class="wp-block-media-text alignwide is-stacked-on-mobile" style="grid-template-columns:29% auto"><figure class="wp-block-media-text__media"><img data-recalc-dims="1" loading="lazy" decoding="async" width="432" height="642" src="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/2025-05-13_08-52-37-1.gif?resize=432%2C642&#038;ssl=1" alt="" class="wp-image-386 size-full"/></figure><div class="wp-block-media-text__content">
<p>Here is a brief demo of the Quick Add function. I navigated to the Profiles page in setup and then clicked on Quick Add to add a new tab for that page. I also set it to open in a new tab.</p>
</div></div>



<p>In addition to Setup tabs, <em>sf tabs</em> also supports adding tabs for Objects and special Setup pages, like Flow Trigger Explorer.</p>



<figure class="wp-block-gallery aligncenter has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="697" height="1024" data-id="389" src="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_object.png?resize=697%2C1024&#038;ssl=1" alt="" class="wp-image-389" srcset="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_object.png?resize=697%2C1024&amp;ssl=1 697w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_object.png?resize=204%2C300&amp;ssl=1 204w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_object.png?resize=768%2C1128&amp;ssl=1 768w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_object.png?w=824&amp;ssl=1 824w" sizes="auto, (max-width: 697px) 100vw, 697px" /></figure>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="697" height="1024" data-id="390" src="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_custom.png?resize=697%2C1024&#038;ssl=1" alt="" class="wp-image-390" srcset="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_custom.png?resize=697%2C1024&amp;ssl=1 697w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_custom.png?resize=204%2C300&amp;ssl=1 204w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_custom.png?resize=768%2C1129&amp;ssl=1 768w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_custom.png?w=818&amp;ssl=1 818w" sizes="auto, (max-width: 697px) 100vw, 697px" /></figure>
</figure>



<p>Tabs can be re-arranged by clicking on the drag handle on the left of the tab in the plugin popup window. Click the toggle to open a tab in a new window. Click the track can to delete it.</p>



<h2 class="wp-block-heading">Settings</h2>



<p><em>sft tabs</em> also has a few settings that you can configure. Click on the gear icon to open/close Settings. </p>



<p>I included light and dark modes, as well as system mode so that you can decide how you want the plugin to look on your computer. There is also a Compact Mode which makes the tabs in the plugin smaller, allowing you to see more of them at a time.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="736" height="1024" data-id="392" src="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_settings.png?resize=736%2C1024&#038;ssl=1" alt="" class="wp-image-392" srcset="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_settings.png?resize=736%2C1024&amp;ssl=1 736w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_settings.png?resize=216%2C300&amp;ssl=1 216w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_settings.png?resize=768%2C1069&amp;ssl=1 768w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_settings.png?w=822&amp;ssl=1 822w" sizes="auto, (max-width: 736px) 100vw, 736px" /></figure>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="717" height="1024" data-id="391" src="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_settingsdark.png?resize=717%2C1024&#038;ssl=1" alt="" class="wp-image-391" srcset="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_settingsdark.png?resize=717%2C1024&amp;ssl=1 717w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_settingsdark.png?resize=210%2C300&amp;ssl=1 210w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_settingsdark.png?resize=768%2C1097&amp;ssl=1 768w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_settingsdark.png?w=816&amp;ssl=1 816w" sizes="auto, (max-width: 717px) 100vw, 717px" /></figure>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="822" height="862" data-id="395" src="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_light.png?resize=822%2C862&#038;ssl=1" alt="" class="wp-image-395" srcset="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_light.png?w=822&amp;ssl=1 822w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_light.png?resize=286%2C300&amp;ssl=1 286w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_light.png?resize=768%2C805&amp;ssl=1 768w" sizes="auto, (max-width: 822px) 100vw, 822px" /></figure>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="824" height="860" data-id="394" src="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_dark.png?resize=824%2C860&#038;ssl=1" alt="" class="wp-image-394" srcset="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_dark.png?w=824&amp;ssl=1 824w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_dark.png?resize=287%2C300&amp;ssl=1 287w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_dark.png?resize=768%2C802&amp;ssl=1 768w" sizes="auto, (max-width: 824px) 100vw, 824px" /></figure>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="822" height="708" data-id="393" src="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_compact.png?resize=822%2C708&#038;ssl=1" alt="" class="wp-image-393" srcset="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_compact.png?w=822&amp;ssl=1 822w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_compact.png?resize=300%2C258&amp;ssl=1 300w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_compact.png?resize=768%2C661&amp;ssl=1 768w" sizes="auto, (max-width: 822px) 100vw, 822px" /></figure>
</figure>



<p>When you delete a tab, you are prompted with a confirmation dialog. If you prefer to skip that confirmation step, you can enable the option for &#8220;Don&#8217;t prompt when deleting&#8221;.</p>



<p>If you&#8217;ve added a bunch of tabs and want to get back to the default configuration, just click &#8220;Reset to Defaults&#8221;.</p>



<h2 class="wp-block-heading">Import/Export Settings</h2>



<p>The Import/Export Settings feature makes it easy for you to backup your settings, install on another, or share your tab set with coworkers. When you click on the button a new browser tab will open where you can choose to Export Confirmation of Import Configuration. <em>sf tabs</em> uses JSON to import and export all of your tabs and settings, including your preferences for light and dark mode.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="575" src="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_imex.png?resize=1024%2C575&#038;ssl=1" alt="" class="wp-image-396" srcset="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_imex.png?resize=1024%2C575&amp;ssl=1 1024w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_imex.png?resize=300%2C168&amp;ssl=1 300w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_imex.png?resize=768%2C431&amp;ssl=1 768w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_imex.png?w=1154&amp;ssl=1 1154w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></figure>



<h2 class="wp-block-heading">Tab Design</h2>



<p>I mentioned earlier that tabs can follow the active tab design. This is actually even better than just that! It also uses the theme branding color for active and hover state on tabs.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="58" src="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_tabs.png?resize=1024%2C58&#038;ssl=1" alt="" class="wp-image-397" srcset="https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_tabs-scaled.png?resize=1024%2C58&amp;ssl=1 1024w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_tabs-scaled.png?resize=300%2C17&amp;ssl=1 300w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_tabs-scaled.png?resize=768%2C43&amp;ssl=1 768w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_tabs-scaled.png?resize=1536%2C87&amp;ssl=1 1536w, https://i0.wp.com/chrisrouse.us/force/wp-content/uploads/2025/05/sftabs_tabs-scaled.png?resize=2048%2C116&amp;ssl=1 2048w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></figure>



<p>A few things are happening in the screenshot above. As you can see, the Home tab no longer has the active tab setting that you normally see. Instead, it has moved to the Flows tab. I&#8217;m hovering over the Contact tab to show the hover state of a tab, which is using the same tab color. This is able to pick up the branding color for tabs so that it always matches the org you&#8217;re working in.</p>



<div style="color:#32373c;background-color:#3373dc" class="wp-block-genesis-blocks-gb-notice gb-font-size-16 gb-block-notice" data-id="d754d9"><div class="gb-notice-title" style="color:#fff"><p>Technical note</p></div><div class="gb-notice-text" style="border-color:#3373dc">
<p>Due to the way Salesforce loads the pages and elements (the DOM) and the way the plugin interacts with the DOM and injects the tabs, the Active tab styling doesn&#8217;t always work. This generally happens on pages that have a lot of stuff to load, like Profiles or Permission Sets, where the timing is unpredictable. When this happens, you will usually end up with the Home button and your custom tab having the active tab style. </p>
</div></div>



<h2 class="wp-block-heading">And as always&#8230;</h2>



<p>If you&#8217;re using <em>sf tabs</em>, please consider leaving a quick review on the extension page in your favorite browser. This will help the plugin rank better and encourage more people to install it. And if you really find the plugin useful, please share it on LinkedIn and tag me in your post.</p>



<h2 class="wp-block-heading">Found a bug or have a feature request</h2>



<p>If you come across a bug or have a feature request, you can message me on LinkedIn or add an issue to the project on github.</p>



<p></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">377</post-id>	</item>
	</channel>
</rss>