{"id":"l-fig-3-5","courseId":"figma-ui-design","lang":"en","kind":"lesson","summary":"Assemble Steady’s mini kit into a documented, publishable library with foundations, components, descriptions and a quality checklist that every component must pass.","html":"<p>A kit that lives in your head is not a kit. Sofia’s test is simple: hand the file to a designer who has never seen Steady, ask them to build a Settings screen, and watch. If they ask “which button do I use?” or “is this teal the real one?”, the kit has failed, no matter how polished the components are.</p>\n<p>This lesson turns the pieces from Lessons 3.1 to 3.4 into something that passes that test.</p>\n<h2 id=\"sec-1\" tabindex=\"-1\">What goes in Steady’s kit</h2>\n<p>Start from the screens, not from a list of components other apps have. Walk through Today, Habit detail and New habit, and note every element that appears more than once or has states. That inventory is the kit:</p>\n<div class=\"table-wrap\" role=\"region\" aria-label=\"Scrollable table\" tabindex=\"0\"><table><thead>\n<tr>\n<th>Component</th>\n<th>Variant properties</th>\n<th>Other properties</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Button</td>\n<td>Type, State, Size</td>\n<td>Label (text), Show icon (boolean), Icon (instance swap)</td>\n</tr>\n<tr>\n<td>Check button</td>\n<td>State: To do, Done, Missed</td>\n<td>none</td>\n</tr>\n<tr>\n<td>Habit icon</td>\n<td>none</td>\n<td>Glyph (instance swap)</td>\n</tr>\n<tr>\n<td>Habit row</td>\n<td>State: To do, Done, Missed</td>\n<td>Name (text), Show streak (boolean), Icon (instance swap)</td>\n</tr>\n<tr>\n<td>Chip</td>\n<td>Selected: true, false</td>\n<td>Label (text)</td>\n</tr>\n<tr>\n<td>Text field</td>\n<td>State: Default, Focused, Error, Disabled</td>\n<td>Label, Hint (text)</td>\n</tr>\n<tr>\n<td>Tab bar</td>\n<td>Active: Today, Stats, Settings</td>\n<td>none</td>\n</tr>\n</tbody>\n</table></div><p>Seven components cover all three screens. Resist adding more until a screen needs one. Every component you add must be kept in sync with variables, modes and naming forever.</p>\n<h2 id=\"sec-2\" tabindex=\"-1\">Structuring the file</h2>\n<p>Put the kit in its own file, <code dir=\"ltr\">Steady Kit</code>, with a few pages:</p>\n<ul>\n<li><strong>Cover</strong>: the kit’s name, an owner, a status (“In progress” or “Stable”) and the date of the last publish.</li>\n<li><strong>Foundations</strong>: swatches for every semantic color in both modes, the type scale, the spacing and radius scales. These are visual documentation of the variables, so people can see the system at a glance.</li>\n<li><strong>Components</strong>: one section per component, holding the component set, a few example instances in realistic use, and short usage notes in plain text (“Use Ghost buttons for low-priority actions next to a Primary”).</li>\n<li><strong>Playground</strong>: a scratch area where people can try instances without touching the components.</li>\n</ul>\n<p>Every component also gets a <strong>description</strong> in its properties panel: one or two sentences on when to use it, plus a link to fuller documentation if you have any. The description appears when people hover the component in the Assets panel and when developers inspect it in Dev Mode, so it travels with the component.</p>\n<h2 id=\"sec-3\" tabindex=\"-1\">The component checklist</h2>\n<p>Before a component is called done, it passes the same checks. Writing them down is what turns personal taste into a team standard:</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"text\" data-index=\"0\"><div class=\"code-head\"><span class=\"code-title\">Text</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"Copy code\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>Copy</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code>[ ] Built with auto layout; no hand-placed children\n[ ] Every color, spacing and radius bound to a semantic variable\n[ ] All states designed: default, pressed, focused, disabled (and error for inputs)\n[ ] Checked in Light and Dark modes, contrast re-measured in both\n[ ] Tested with extreme content: long label, empty value, larger text\n[ ] Resized to its minimum and maximum sensible widths\n[ ] Properties and values named by meaning, matching the code where possible\n[ ] Description written; usage example placed on the Components page</code></pre></div>\n<p>On Organization and Enterprise plans, at the time of writing, Figma’s <strong>Check designs</strong> can scan a selection for hard-coded values that should be variables and suggest library replacements. On other plans, select a component and read its fills, gaps and padding in the right sidebar: a raw hex code or an unbound number stands out immediately.</p>\n<aside class=\"callout callout-mistake\" role=\"note\"><p class=\"callout-title\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/></svg><span><span class=\"callout-kind\">Common mistake</span><span class=\"callout-sep\" aria-hidden=\"true\"> · </span>Names that drift</span></p>\n<p><code dir=\"ltr\">Primary button</code>, <code dir=\"ltr\">btn/secondary</code>, and a property called <code dir=\"ltr\">state</code> with values <code dir=\"ltr\">on</code> and <code dir=\"ltr\">Disabled</code>: each is fine alone and maddening together. Pick a convention, for example Title Case for components, properties and values, and fix inconsistencies before you publish, because renaming later breaks every reference people have learned.</p>\n</aside>\n<h2 id=\"sec-4\" tabindex=\"-1\">Publishing the library</h2>\n<p>Publishing makes the kit’s components, styles and variables available to other files in your team or organization. At the time of writing, you publish from the Assets panel’s library options, and libraries require a paid or Education plan. Each publish asks for a description of changes. Write it for the person receiving it: “Habit row padding is now 12/16 to match the 8-point scale; no action needed” beats “updates”.</p>\n<figure class=\"diagram\"><svg class=\"diagram-svg\" focusable=\"false\" viewBox=\"0 0 680 220\" role=\"img\" aria-labelledby=\"l-fig-3-5-t1\"><defs><marker id=\"arrow-l-fig-3-5-1\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" class=\"d-arrowhead\"/></marker></defs>\n  <title id=\"l-fig-3-5-t1\">The Steady Kit file publishes to the team library. Two subscriber files, Steady Screens and Steady Marketing, receive an update notice and accept it on their own schedule.</title>\n  <rect class=\"d-box-primary\" x=\"20\" y=\"80\" width=\"160\" height=\"60\" rx=\"12\"/>\n  <text class=\"d-label-strong\" x=\"100\" y=\"106\" text-anchor=\"middle\">Steady Kit</text>\n  <text class=\"d-label-muted\" x=\"100\" y=\"126\" text-anchor=\"middle\">main components</text>\n  <path class=\"d-arrow\" d=\"M182 110 L258 110\" marker-end=\"url(#arrow-l-fig-3-5-1)\"/>\n  <text class=\"d-label-muted\" x=\"220\" y=\"100\" text-anchor=\"middle\">publish</text>\n  <rect class=\"d-box\" x=\"260\" y=\"80\" width=\"150\" height=\"60\" rx=\"12\"/>\n  <text class=\"d-label\" x=\"335\" y=\"115\" text-anchor=\"middle\">Team library</text>\n  <path class=\"d-arrow\" d=\"M412 100 L488 50\" marker-end=\"url(#arrow-l-fig-3-5-1)\"/>\n  <path class=\"d-arrow\" d=\"M412 120 L488 170\" marker-end=\"url(#arrow-l-fig-3-5-1)\"/>\n  <rect class=\"d-box-accent\" x=\"490\" y=\"22\" width=\"170\" height=\"56\" rx=\"12\"/>\n  <text class=\"d-label\" x=\"575\" y=\"46\" text-anchor=\"middle\">Steady Screens</text>\n  <text class=\"d-label-muted\" x=\"575\" y=\"66\" text-anchor=\"middle\">review and accept</text>\n  <rect class=\"d-box-accent\" x=\"490\" y=\"142\" width=\"170\" height=\"56\" rx=\"12\"/>\n  <text class=\"d-label\" x=\"575\" y=\"166\" text-anchor=\"middle\">Steady Marketing</text>\n  <text class=\"d-label-muted\" x=\"575\" y=\"186\" text-anchor=\"middle\">accepts later</text>\n</svg><figcaption>A library publishes changes; subscribing files review and accept them</figcaption></figure>\n<p>Files that use the library see that updates are available and accept them when they are ready, so a change to the kit never lands silently in the middle of someone’s work. That is also why breaking changes, such as renaming a property, deserve a clear warning in the publish notes.</p>\n<aside class=\"callout callout-tip\" role=\"note\"><p class=\"callout-title\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5\"/><path d=\"M9 18h6\"/><path d=\"M10 22h4\"/></svg><span><span class=\"callout-kind\">Tip</span><span class=\"callout-sep\" aria-hidden=\"true\"> · </span>Version the kit like software</span></p>\n<p>Keep a short changelog on the Cover page: date, what changed, whether anyone needs to act. When a developer asks “since when has the chip had a min width?”, the answer takes ten seconds.</p>\n</aside>\n<p>Section 3 is complete: Steady has a small, themed, documented kit. Section 4 makes it move with prototyping, makes sure everyone can use it, and gets it into developers’ hands.</p>\n","toc":[{"id":"sec-1","text":"What goes in Steady’s kit","level":2},{"id":"sec-2","text":"Structuring the file","level":2},{"id":"sec-3","text":"The component checklist","level":2},{"id":"sec-4","text":"Publishing the library","level":2}],"takeaways":["A kit is useful when someone else can find, understand and use a component without asking you, so structure and documentation matter as much as the components.","Build the kit from patterns the screens actually repeat, and add a component only when a real screen needs it.","Every component should pass the same checklist, covering auto layout, variables, states, both modes, extreme content and a description.","Publishing a library lets other files use the kit, and every publish should explain what changed so subscribers can review updates.","Names are an interface; pick one convention for components, properties and values and use it everywhere."],"further":[{"title":"Lesson 3, Build your design system (Figma)","url":"https://help.figma.com/hc/en-us/articles/14548865734679-Lesson-3-Build-your-design-system"},{"title":"Guide to libraries in Figma","url":"https://help.figma.com/hc/en-us/articles/360041051154-Guide-to-libraries-in-Figma"},{"title":"Check designs in Figma","url":"https://help.figma.com/hc/en-us/articles/39592284074263-Check-designs-in-Figma"}],"quiz":[{"q":"<p>A designer proposes building a Carousel, a Data table and a Date range picker for Steady’s kit “so we’re ready”. None of Steady’s screens uses them. What should Sofia say?</p>","options":[{"text":"Build them now, because adding components later is expensive.","why":"Components built without a real use are usually wrong when the real use arrives, and they still need maintaining in the meantime."},{"text":"Build them but hide them from the library.","why":"Hidden or not, they cost time to make and keep in sync with variables and modes."},{"text":"Wait until a screen needs them, then build them from that real use.","why":"Correct. A kit grows from repeated patterns in real screens, which keeps it small and every component justified."},{"text":"Copy them from a community kit to save time.","why":"Borrowed components bring someone else’s tokens, names and assumptions, so they rarely fit without rework."}],"answer":2},{"q":"<p>You publish an update to the Steady kit that changes the habit row’s padding. What happens in a screens file that uses the library?</p>","options":[{"text":"Instances in that file change instantly with no notice.","why":"Library updates are offered to subscribing files for review, not applied silently."},{"text":"The file is notified of available updates, and someone reviews and accepts them.","why":"Correct. Subscribers see that updates are available and choose when to accept them, which is why publish notes matter."},{"text":"Nothing, because instances from libraries never update.","why":"They do update once the file accepts the library update. That is the whole point of a library."},{"text":"The screens file is duplicated so the old version is kept.","why":"Figma does not duplicate files on library updates. Version history covers rollback."}],"answer":1},{"q":"<p>Which item belongs on Steady’s component checklist because it catches the most bugs before handoff?</p>","options":[{"text":"The component looks good at its default size in light mode.","why":"That is where it was designed, so it almost always passes. Bugs live at the edges."},{"text":"The component has a drop shadow.","why":"Shadows are a style choice, not a quality check."},{"text":"The component uses the newest Figma feature available.","why":"Newer features are not automatically better for the people using the kit."},{"text":"The component has been tested with extreme content, both modes and its narrowest and widest sizes.","why":"Correct. Long labels, dark mode and resizing are where components break, so the checklist forces those tests."}],"answer":3}],"exercise":{"kind":"spot-bug","language":"text","code":"Components page\n  Section: Buttons\n    Button               component set   Type: Primary | Secondary | Ghost\n                                         State: Default | Pressed | Disabled\n                                         Label: text   Show icon: boolean   Icon: instance swap\n    Button 2             component       copy of Button/Primary with an icon\n  Section: Controls\n    Check button         component set   State: To do | Done | Missed\n    Chip                 component set   Selected: true | false   Label: text\n    Toggle               component set   State: Teal | Grey\n  Section: Rows\n    Habit row            component set   State: To do | Done | Missed\n                                         Name: text   Show streak: boolean\n      Row background     fill: #FFFFFF\n    Text field           component set   State: Default | Focused | Error | Disabled","bugLines":[6,10,14],"title":"Audit the kit before publishing","prompt":"<p>Before the first publish of the Steady Kit, Sofia asks you to audit the Components page. Here it is written out as text. Check it against the component checklist from the lesson, focusing on duplication, naming and variables (states get their own review in Lesson 4.2), and select every line that should block the publish.</p>\n","hints":["Look for anything that duplicates an existing component instead of using its properties.","Check that values are named by meaning and that colors come from variables.","Three lines: a near-duplicate main component, appearance-based values, and a hard-coded fill."],"explanation":"<p>Line 6: <code dir=\"ltr\">Button 2</code> is a second main component that duplicates Button with an icon. The Button already has a <strong>Show icon</strong> boolean and an <strong>Icon</strong> instance swap, so delete the copy and use the property; otherwise every fix must be made twice. Line 10: the Toggle’s values <code dir=\"ltr\">Teal | Grey</code> describe <strong>appearance</strong>; in dark mode or after a rebrand they lie. Use <code dir=\"ltr\">On | Off</code>. Line 14: the row background has a <strong>hard-coded</strong> <code dir=\"ltr\">#FFFFFF</code> fill, so it will stay white in dark mode. Bind it to <code dir=\"ltr\">color/surface/default</code>.</p>\n","checkLabels":{}},"words":726,"readMinutes":3}