Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Designing and Automating Component Specifications

Designing and Automating Component Specifications

Presented at the Into DS Conference on May 15, 2024

Nathan Curtis

May 15, 2024
Tweet

More Decks by Nathan Curtis

Other Decks in Design

Transcript

  1. © Copyright 2024 • EightShapes LLC {Title} {Details} Show less

    {Label} {Label} 1 2 3 4 5 6 7 8 9 {Title} {Details} Show less {Label} {Label} {Title} {Details} Show less {Label} {Label} 16 16 Error ESDSV Alert Background color : ESDS Color Alert/Error/Background #580018 Border color : ESDS Color Alert/Error/Element #F85558 Decorative Icon Name : ESDS Icon asset / Alert-error Color : Error {Title} {Details} Show less {Label} {Label} Designing and Automating Component Specifications Nathan Curtis Into Design Systems May 2024
  2. © Copyright 2024 • EightShapes LLC Fairfax, VA (near Washington,

    DC) Design systems nerd, ~85 since 2006 Hi, I’m Nathan
  3. Coaching Projects Token taxonomy UI composability UI specs and schema

    Strategy and planning Process optimization Embedding as team lead Training
  4. Opening July 1, 2024 Coaching Projects Token taxonomy UI composability

    UI specs and schema Strategy and planning Process optimization Embedding as team lead Training Coaching Projects Token taxonomy UI composability UI specs and schema Strategy and planning Process optimization Embedding as team lead Training Closing June 30, 2024 Opened 2006
  5. © Copyright 2024 • EightShapes LLC Layout and spacing ESDS

    Card Direction : Vertical Alignment : Top left Vertical resizing : Hug Horizontal resizing : Fixed Item spacing : 0 {Title} {Label} {Title} {Label} Content Direction : Vertical Alignment : Top left Vertical resizing : Hug Horizontal resizing : Fill Item spacing : 16 Padding : 24 {Title} {Label} {Title} {Label} 16 24 24 24 24 ]-[ Direction : Horizontal Alignment : Top left Vertical resizing : Fill Horizontal resizing : Fixed Item spacing : 7 Anatomy 1 ESDS Card Border radius : 8 2 Image Depends on : ESDS Image Aspect ratio : 16:9 3 Text Depends on : ESDS Card text Description? : false Metadata? : false Surface : Light Size : Medium 4 Actions Depends on : ESDS Card actions Variant : Button Size : Medium Surface : Light 5 Container Depends on : ESDS Card container Surface : Primary light State : Initial {Title} {Label} 1 2 3 4 5 https://www.figma.com/community/plugin/1205622541257680763 EightShapes Specs Figma plugin
  6. {Component name} Anatomy 1 {Layer name} Depends on : {Dependency}

    {Name} : {Value} {Name} : {Value} 2 {Layer name} {Name} : {Style/token} {Name} : {Style/token} {Name} : {Value} 3 {Layer name} {Name} : {Value} {Name} : {Style/token} {Name} : {Style/token} 4 {Layer name} Depends on : {Dependency} {Name} : {Value} {Name} : {Value} # # # # # # # # # # # # Properties {Variant property name} {Property value} (default) {Layer name} {Name} : {Style/token} {Name} : {Value} {Layer name} Depends on : {Dependency} {Name} : {Value} {Property value} {Layer name} {Name} : {Style/token} {Name} : {Value} {Layer name} Depends on : {Dependency} {Name} : {Value} {Property value} {Layer name} {Name} : {Style/token} {Name} : {Value} {Layer name} Depends on : {Dependency} {Name} : {Value} {Boolean property name} Property type : Boolean Default : {true/false} Associated layers : {Layer name} {Layer name} {Layer name} Layout and spacing Spacing {Layer name} {Name} : {Value} {Name} : {Value} {Name} : {Value} {Name} : {Value} {Name} : {Value} {Layer name} {Name} : {Value} {Name} : {Value} {Name} : {Value} {Name} : {Value} {Name} : {Value} 16 16 16 16 16 16 Overflow {Layer name} {Description} {Layer name} {Description} Touch targets {Layer name} {Description} 48 48 Responsive layout {Breakpoint or Device} {Description} {Breakpoint or Device} {Description} Accessi bility Screen reading For when t he mem ber is usin g a screen reader , includin g ho w elements s hould be identified , read , and in what order . ESDS Te xt input Readin g : [ESDS Form la bel ]. [Icon ] [value/ place holder ], [role ]. Example : “Cost rate , t he internal cost t hat t his person incurs on your business . Dollar 100, [role ].” Role : te xt bo x {Layer name} Readin g : { Readin g} Example : { Example} Role : { Role} Focus order ## . { Name} { Role} ## . { Name} { Role} ## . { Name} { Role} ## . { Name} { Role} # # # # # # # # # # # # Announced order ## . { Name} { Role} ## . { Name} { Role} ## . { Name} { Role} ## . { Name} { Role} # # # # # # # # # # # # Alternative te xt For any non-decorati ve ima ge and visual elements con veyed only wit h color , pro vide alternate te xt . By default , any element NOT listed belo w s hould be considered decorati ve and not include alternate te xt . Element Type Alternate te xt { Element name , suc h as Call to action button} {Type , suc h as Visual element} {Alternate te xt , suc h as Button or Icon name} { Element name , suc h as Call to action button} {Type , suc h as Visual element} {Alternate te xt , suc h as Button or Icon name} { Element name , suc h as Call to action button} {Type , suc h as Visual element} {Alternate te xt , suc h as Button or Icon name} { Element name , suc h as Call to action button} {Type , suc h as Visual element} {Alternate te xt , suc h as Button or Icon name} { Element name , suc h as Call to action button} {Type , suc h as Visual element} {Alternate te xt , suc h as Button or Icon name} Component tokens {Su bsection title} Token Alias Figma style Value 00 {Value} $esds-... $esds-... { Fi gma style} {Description} 00 {Value} $esds-... $esds-... { Fi gma style} {Description} Aa {Value} $esds-... $esds-... { Fi gma style} {Description} {Value} $esds-... $esds-... { Fi gma style} {Description} {Value} $esds-... $esds-... { Fi gma style} {Description} {Value} $esds-... $esds-... { Fi gma style} {Description} {Su bsection title} Token Alias Figma style Value 00 {Value} $esds-... $esds-... { Fi gma style} 00 {Value} $esds-... $esds-... { Fi gma style} 00 {Value} $esds-... $esds-... { Fi gma style} 00 {Value} $esds-... $esds-... { Fi gma style} {Su bsection title} Token {Value} $esds-... {Value} $esds-... {Value} $esds-... {Value} $esds-... {Value} $esds-... {Value} $esds-... {Value} $esds-... {Value} $esds-... Version his Version # .# .# • New features d {DescriptionR d {DescriptionR d {Description} Enhancements d {DescriptionR d {DescriptionR d {Description} Fi xes d {DescriptionR d {DescriptionR d {Description} Version # .# .# • New features d {DescriptionR d {DescriptionR d {Description} Enhancements d {DescriptionR d {DescriptionR d {Description} Fi xes d {DescriptionR d {DescriptionR d {Description} © Copyri ght 2 024 • Ei ghtS hapes LL C UI design specification
 “Design spec” “Spec” or or , simply A document t hat descri bes ho w an interface is composed , confi gured , visually desi gned , be ha ves and more , whet her a component , pa ge or somet hin g else .
  7. © Copyright 2024 • EightShapes LLC What is a specification

    made of? Anatomy Properties (and Modes, too) Layout and spacing Behaviors Accessibility Motion Token inventories Version history ...and more ESDSV Alert 1 Decorative Icon 2 Title 3 Icon button layout container 4 Dismiss Icon 5 Details 6 Details drawer 7 Content area 8 Action area 9 {Title} {Details} {Drawer label} {Label} {Label} 1 2 3 4 5 6 7 8 9 {Title} {Details} {Drawer label} Basic ESDSV Alert Background color : ESDS Color Alert/Basic/Background #F0F1F1 Border color : ESDS Color Alert/Basic/Element #A6ACB0 Decorative Icon Color : Secondary {Title} {Details} {Drawer label} Informational ESDSV Alert Background color : ESDS Color Alert/Info/Background #EDF0FB Border color : ESDS Color Alert/Info/Element #0E68D4 Decorative Icon Color : Info {Title} {Details} {Drawer label} Success ESDSV Alert Background color : ESDS Color Alert/Success/Background #E6FDEB Border color : ESDS Color Alert/Success/Element #097D33 Decorative Icon Color : Success {Title} {Details} {Drawer label} {Label} {Label} {Title} {Details} {Drawer label} {Label} {Label} 8 16 16 16 16 Direction : Horizontal Alignment : Top left Vertical resizing : Hug Horizontal resizing : Fixed Item spacing: ESDS Density item-spacing/half-x 8 Padding : ESDS Density padding/1x 16 {Title} {Details} {Drawer label} {Label} {Label} {Title} {Details} {Drawer label} {Label} {Label} 16 16 Direction : Vertical Alignment : Top left Vertical resizing : Hug Horizontal resizing : Fill Item spacing: ESDS Density item-spacing/1x 16 {Title} {Details} {Drawer label} {Label} {Label} {Title} {Details} {Drawer label} 12 12 Direction : Vertical Alignment : Top left Vertical resizing : Hug Horizontal resizing : Fill Item spacing: ESDS Density item-spacing/three-q uarter-x 12
  8. © Copyright 2024 • EightShapes LLC People making things Developers

    coding the thing Designers making a Figma asset to publish Teammates composing docs Who uses a specification?
  9. © Copyright 2024 • EightShapes LLC People making things Developers

    coding the thing Designers making a Figma asset to publish Teammates composing docs People using things Developers importing and using the code Instead, use docs or Storybook. Designers inserting a Figma asset Instead, use guideline docs like Use When. Writers authoring copy Instead, use documented guidelines. Who uses a specification?
  10. © Copyright 2024 • EightShapes LLC When are specifications used?

    Design Specification Code Release Discovery Handoff dev to A moment of transition during which a designer delivers final work so code can proceed confidently.
  11. Handoff to devteammates A moment of transition during which a

    so production can proceed confidently. designer delivers final work code team provisionally agrees on an API © Copyright 2024 • EightShapes LLC When are specifications used? Design Specification Figma Asset Design Docs Code Release Dev Docs Discovery
  12. © Copyright 2024 • EightShapes LLC Problem Takes too long

    to make Specs are costly to produce manually, both in time and opportunities missed.
  13. © Copyright 2024 • EightShapes LLC Problem Takes too long

    to make Specs are costly to produce manually, both in time and opportunities missed. Problem Sucks designers souls Most designers want to do other things, and describe this task as “soul sucking.”
  14. © Copyright 2024 • EightShapes LLC Problem Takes too long

    to make Specs are costly to produce manually, both in time and opportunities missed. Problem Sucks designers souls Most designers want to do other things, and describe this task as “soul sucking.” Problem Quality varies Designers struggle withv x completenes† x consistenc… x precisio} x concision
  15. © Copyright 2024 • EightShapes LLC OPPORTUNITY We make powerful

    things in Figma OPPORTUNITY Figma API exposes the decisions
  16. © Copyright 2024 • EightShapes LLC OPPORTUNITY We make powerful

    things in Figma OPPORTUNITY Figma API exposes the decisions OPPORTUNITY Spec are predictable
  17. © Copyright 2024 • EightShapes LLC A Figma plugin that

    automates production of detailed Anatomy, Properties, Modes and Layout and Spacing specifications
  18. Anatomy {Title} {Details} Show less {Label} {Label} 1 2 3

    4 5 6 7 8 9 10 11 12 EightShapes Alert 1 Width: ESDS Sizing / platform/iOS default width (343) Border weight: 2 Decorative Icon 2 Depends on: ESDS-V Icon Name: <Instance name> Size: 20x20 ]-[ 3 ]-[ 4 ]-[ 5 Title 6 Text style: Heading/5 Icon button layout container 7 Height: ESDS Sizing / icon/small (16) Width: ESDS Sizing / icon/small (16) Dismiss Icon 8 Depends on: ESDS-V Icon Name: <Instance name> Size: 16x16 Color: Primary Details 9 Text style: Body/Small Details drawer 10 Depends on: ESDSV Details drawer State: Open Content area 11 Depends on: .Slot Action area 12 Depends on: ESDSV Alert actions Actions: Button + Link
  19. Properties Type {Title} {Details} Show less {Label} {Label} Basic EightShapes

    Alert Background color: ESDS Color / Alert/Basic/Background (#F0F1F1) Border color: ESDS Color / Alert/Basic/Element (#A6ACB0) Decorative Icon Color: Secondary {Title} {Details} Show less {Label} {Label} Informational EightShapes Alert Background color: ESDS Color / Alert/Info/Background (#EDF0FB) Border color: ESDS Color / Alert/Info/Element (#0E68D4) Decorative Icon Color: Info {Title} {Details} Success EightShapes Alert Background color: ESDS Color / Alert/Success/Background (#E6FDEB) Border color: ESDS Color / Alert/Success/Element (#097D33) Decorative Icon
  20. Modes ESDS Space {Title} {Details} Show less {Label} {Label} Cozy

    EightShapes Alert Item spacing: ESDS Space / item-spacing/half-x (8) Padding: ESDS Space / padding/1x (16) ]-[ Item spacing: ESDS Space / item-spacing/1x (16) ]-[ Item spacing: ESDS Space / item-spacing/three-quarter-x (12) ]-[ Item spacing: ESDS Space / item-spacing/one-and-a-half-x (24) {Title} {Details} Show less {Label} {Label} Comfortable EightShapes Alert Item spacing: ESDS Space / item-spacing/half-x (10) Padding: ESDS Space / padding/1x (20) ]-[ Item spacing: ESDS Space / item-spacing/1x (20) ]-[ Item spacing: ESDS Space / item-spacing/three-quarter-x (15) ]-[ Item spacing: ESDS Space / item-spacing/one-and-a-half-x (30) {Title} {Details} Show less {Label} {Label} Compact EightShapes Alert Item spacing: ESDS Space / item-spacing/half-x (6) Padding: ESDS Space / padding/1x (12) ]-[ Item spacing: ESDS Space / item-spacing/1x (12) ]-[ Item spacing: ESDS Space / item-spacing/three-quarter-x (9) ]-[ Item spacing: ESDS Space / item-spacing/one-and-a-half-x (18) ESDS Color {Title} {Details} Show less {Label} {Label} Light Title Text color: ESDS Color / Text/Primary (#0E1114) EightShapes Alert Background color: ESDS Color / Alert/Basic/Background (#F0F1F1) Border color: ESDS Color / Alert/Basic/Element (#A6ACB0) Details Text color: ESDS Color / Text/Primary (#0E1114) {Title} {Details} Show less {Label} {Label} Dark Title Text color: ESDS Color / Text/Primary (#FFFFFF) EightShapes Alert Background color: ESDS Color / Alert/Basic/Background (#0E1114) Border color: ESDS Color / Alert/Basic/Element (#666E74) Details Text color: ESDS Color / Text/Primary (#FFFFFF) ESDS Shape {Title} {Details} Show less {Label} {Label} Subtle round EightShapes Alert Border radius: ESDS Shape / border radius/module (4) {Title} {Details} Show less {Label} {Label} Round EightShapes Alert Border radius: ESDS Shape / border radius/module (16) {Title} {Details} Show less {Label} {Label} Squared EightShapes Alert Border radius: ESDS Shape / border radius/module (0)
  21. Layout and spacing Type: Basic {Title} {Details} Show less {Label}

    {Label} 8 16 16 16 16 EightShapes Alert Direction: Horizontal Alignment: Top left Vertical resizing: Hug Horizontal resizing: Fixed Item spacing: ESDS Space / item-spacing/half-x (8) Padding: ESDS Space / padding/1x (16) {Title} {Details} Show less {Label} {Label} {Title} {Details} Show less {Label} {Label} 16 16 ]-[ Direction: Vertical Alignment: Top left Vertical resizing: Hug Horizontal resizing: Fill Item spacing: ESDS Space / item-spacing/1x (16) {Title} {Details} Show less {Label} {Label} {Title} {Details} Show less 12 12 ]-[ Direction: Vertical Alignment: Top left Vertical resizing: Hug Horizontal resizing: Fill Item spacing: ESDS Space / item-spacing/three-quarter-x (12) {Title} {Details} Show less {Title} 24 ]-[ Direction: Horizontal Alignment: Top right Vertical resizing: Hug Horizontal resizing: Fill Item spacing: ESDS Space / item-spacing/one-and-a-half-x (24)
  22. Anatomy Title Sub-title 1 2 3 4 Lightning Page Header

    1 Width: 600 Border color: Foundation/Gray/Neutral-80 (#C9C9C9) Border weight: 1 Border radius: 4 Standard Icons / A / account 2 Depends on: Standard Icons / A / account Title 3 Text color: Text / Default (#181818) Text style: 06 - Page Title / Default Sub-title 4 Text color: #000000 Text style: 03 - Body/Default Title App Name Label 5 6 App Name 5 Text color: #000000 Text style: 03 - Body/Default Button 6 Depends on: Button Type: Neutral State: Default Icon: None Page Name Sub-Title Label Label Label Label Label Title 7 8 9 10 11 12 13 14 15 16 17 18 Page Name 7 Text color: #000000 Text style: 03 - Body/Default Sub-Title 8 Text color: #000000 Text style: 03 - Body/Default _Item 9 Depends on: _Item Type: Base Text State: Default Position: Left _Item 10 Depends on: _Item Type: Icon State: Default Position: Right Button Icon 11 Depends on: Button Icon Type: Bordered Size: More State: Default Button Icon 12 Depends on: Button Icon Type: Bordered Size: More State: Default Button Icon (Stateful) 13 Depends on: Button Icon (Stateful) State: Default Selected: No Button Icon (Stateful) 14 Depends on: Button Icon (Stateful) State: Default Selected: No _Item 15 Depends on: _Item Type: Icon State: Default Position: Left _Item 16 Depends on: _Item Type: Icon State: Default Position: Right Title 17 Text color: Text / Default (#181818) Text style: 06 - Page Title / Default Utility Icons / D / down 18 Depends on: Utility Icons / D / down Record Name Title Label Label Label Label Label Label Label Label Label Label Label Label 19 20 21 22 23 24 25 26 27 28 29 Card 19 Depends on: Card Header: False Footer: False Header 20 Height: 72 Width: 600 Background color: Foundation/Gray/Neutral-95 (#F3F3F3) Border color: Foundation/Gray/Neutral-80 (#C9C9C9) Border weight: 1 Top left radius: 4 Top right radius: 4 Standard Icons / A / account 21 Depends on: Standard Icons / A / account Record Name 22 Text color: #000000 Text style: 03 - Body/Default Title 23 Text color: Text / Default (#181818) Text style: 06 - Page Title / Default Button 24 Depends on: Button Type: Neutral State: Default Icon: Left Button Group 25 Height: 32 _Item 26 Depends on: _Item Type: Base Text State: Default Position: Left
  23. Lightning Button Anatomy Label 1 2 Lightning Button 1 Height:

    32 Border radius: 4 Label 2 Text align: Center Text style: 03 - Body/Default Label 3 Icon 3 Depends on: Utility Icons / F / fallback Properties Type : Brand by State Label Default Lightning Button Background color: Foundation/Blue/Blue-50 (#0176D3) Stroke alignment : Center Label Text color: Foundation/Gray/Neutral-100 (#FFFFFF) Label Hover Lightning Button Background color: Foundation/Blue/Blue-30 (#014486) Stroke alignment : Center Label Text color: Foundation/Gray/Neutral-100 (#FFFFFF) Label Focus Lightning Button Background color: Foundation/Blue/Blue-30 (#014486) Drop shadow: 01 - Button / Focus (0px 0px 3px 0px #0070D2) Stroke alignment : Center Label Text color: Foundation/Gray/Neutral-100 (#FFFFFF) Label Disabled Lightning Button Background color: Foundation/Gray/Neutral-65 (#A0A0A0) Stroke alignment : Center Label Text color: Foundation/Gray/Neutral-100 (#FFFFFF) Type : Brand Outline by State Label Default Lightning Button Border color: Foundation/Blue/Blue-50 (#0176D3) Background color: Foundation/Gray/Neutral-100 (#FFFFFF) Stroke alignment : Inside Border weight: 1 Label Text color: Foundation/Blue/Blue-50 (#0176D3) Label Hover Lightning Button Background color: Foundation/Gray/Neutral-95 (#F3F3F3) Border color: Foundation/Blue/Blue-50 (#0176D3) Stroke alignment : Inside Border weight: 1 Label Text color: Vibrant / Cloud Blue / 40 (#05628A) Label Focus Lightning Button Background color: Foundation/Gray/Neutral-95 (#F3F3F3) Border color: Foundation/Blue/Blue-50 (#0176D3) Drop shadow: 01 - Button / Focus (0px 0px 3px 0px #0070D2) Stroke alignment : Inside Border weight: 1 Label Text color: Vibrant / Cloud Blue / 40 (#05628A) Label Disabled Lightning Button Background color: Foundation/Gray/Neutral-100 (#FFFFFF) Border color: Foundation/Gray/Neutral-80 (#C9C9C9) Border weight: 1 Label Text color: Foundation/Gray/Neutral-90 (#E5E5E5) Type : Destructive by State Label Label Label Label
  24. © Copyright 2024 • EightShapes LLC Plugin user benefits BENEFIT

    Production is effortless Spec cost --> zero 
 BENEFIT Less time on specs --> More time for other stuff! More opportunities 
 BENEFIT Collaborators spend less time inspecting art Less inspection 
 BENEFIT Less mistakes, less missed attributes Higher quality 

  25. © Copyright 2024 • EightShapes LLC Maker benefits OUTCOME Learning

    the API lifted 
 my Figma expertise Figma knowledge 
 OUTCOME I learned Typescript and improved other skills Coding, again 
 OUTCOME I’m nowhere close to replacing my day job Revenue 
 OUTCOME I really love making things to solve problems. Most of the time, at least. Joy 

  26. © Copyright 2024 • EightShapes LLC Backlog Custom formats of

    spec spacing Space transformation (16 -> 4X) Inventory of detected variables/tokens Token alias chains (from semantic to primitive to value) https://github.com/orgs/EightShapes/projects/3/views/2
  27. Motion Section Heading {Animation Name} {Description} Start {Name} : {Style/token}

    {Name} : {Value} {Name} : {Value} End {Name} : {Style/token} {Name} : {Value} {Name} : {Value} Timing {Name} : {Value} {Name} : {Value} {Name} : {Value} Start {Name} : {Style/token} {Name} : {Value} {Name} : {Value} End {Name} : {Style/token} {Name} : {Value} {Name} : {Value} Timing {Name} : {Value} {Name} : {Value} {Name} : {Value} Some art goes in here {Heading} {Description} Accessibility Screen reading For when the member is using a screen reader, including how elements should be identified, read, and in what order. ESDS Text input Reading : [ESDS Form label]. [Icon] [value/ placeholder], [role]. Example : “Cost rate, the internal cost that this person incurs on your business. Dollar 100, [role].” Role : text box {Layer name} Reading : {Reading} Example : {Example} Role : {Role} Focus order ##. {Name} {Role} ##. {Name} {Role} ##. {Name} {Role} ##. {Name} {Role} # # # # # # # # # # # # No Motion or Behaviors sections Low Figma feature usage, low demand No Accessibility section Higher demand, no Figma support and it’s hard
  28. © Copyright 2024 • EightShapes LLC Specs plugin Explore decisions

    to code a new feature Review annotated designs Dev mode Explore decisions to code a new feature Review annotated designs Live connection of asset and inspection Transform an asset into copiable code Expose developer documentation Inspect design side-by-side in code editor Streamline workflows by integrating tools $25–35/mo per dev mode user Free ($8/mo for Pro) per maker
  29. © Copyright 2024 • EightShapes LLC Inspecting designs is a

    treasure hunt, without a treasure map.
  30. © Copyright 2024 • EightShapes LLC Specs map organized design

    decisions. That is the treasure. No hunting needed.
  31. © Copyright 2024 • EightShapes LLC Marking artwork is time

    consuming. Designers miss things too...
  32. © Copyright 2024 • EightShapes LLC So, how do collaborators

    react?
 They all use the plugin, right?
  33. © Copyright 2024 • EightShapes LLC Figma asset Specification ESDS

    Card Contained? Custom areas None Action(s)? Container Surface Light primary State Initial Image Aspect ratio 16:9 Text Size Medium Metadata? Description? Actions Variant Button Size Medium ESDS Card Anatomy ESDS Card 1 Width : 375 Border radius : 8 ESDS Image 2 Depends on : ESDS Image Aspect ratio : 16:9 ESDS Card text 3 Depends on : ESDS Card text Metadata? : true Description? : true Surf ace : Light Siz e : Medium ESDS Card actions 4 Depends on : ESDS Card actions V ariant : Button Siz e : Medium Surf ace : Light ESDS Card container 5 Depends on : ESDS Card container Surf ace : P rim ary l ight State : I nitial { M e t a d a t a } {T itl e} { Description} { Lab el} 1 2 3 4 5 L ayou t and spacing Content Direction : V ertical Al ignm ent : T op l ef t V ertical resiz ing : H ug H oriz ontal resiz ing : F ill I tem spacing: 16 P adding : 24 { M e t a d a t a } {T itl e} { Description} { Lab el} { M e t a d a t a } {T itl e} { Description} { Lab el} 16 24 24 24 24 ]-[ Direction : H oriz ontal Al ignm ent : T op l ef t What system teamm ates use What adopting designers use { M e t a d a t a } {T itl e} { Description} { Lab el}
  34. (Updates in orange) © Copyright 2024 • EightShapes LLC Using

    automated specs after handoff Design Specification Figma Asset Design Docs Code Release Dev Docs Discovery Handoff Alignment Visual QA
  35. © Copyright 2024 • EightShapes LLC 4 5 3 2

    1 https://mui.com/material-ui/api/text-field/ Figma asset Code
  36. © Copyright 2024 • EightShapes LLC Aligning Figma assets to

    code API Anatomy <TextField> 1 Width : 220 Input 2 Label 3 Text style : input/label Content 4 Min height : 24 Min width : 24 <Icon> 5 Depends on : <Icon> Icon Instance : <Instance name> Size : Medium Type : SVG Icon Value 6 Text style : input/value Placeholder 7 Text color : palette text/disabled #000000, 38% Text style : input/value <Icon> 8 Depends on : <Icon> Icon Instance : <Instance name> Size : Medium Type : SVG Icon Underline 9 Stroke alignment : Center <FormHelperText> 10 Depends on : <FormHelperText> Disabled : Enabled Label Value Placehol der H elp er t ext 1 2 3 4 5 6 7 8 9 1 0 Properties State : Enabled by Variant Label Value Standard Input B order radius : 0 Label Text color : palette text/secondary #000000, 6 0% Underline B order color : palette _ components/input/standard/enabledB order #000000, 42% B order weight : 1 Label Value Filled Content B ackground color : palette _ components/input/f illed/enabledF ill #000000, 6 % Label Text color : palette text/secondary #000000, 6 0% Value Text color : palette text/primary #000000, 87 % Underline B order color : palette _ components/input/standard/enabledB order #000000, 42% B order weight : 1 Value Label O utlined Input B order color : palette _ components/input/outlined/enabledB order #000000, 23% B order weight : 1 B order radius : shape borderR adius 4 Value Text color : palette text/primary #000000, 87 % State : Hov ered by Variant Label Value Standard Input B order radius : 0 Label Text color : palette text/secondary #000000, 6 0% Underline B order color : palette _ components/input/standard/hoverB order #000000 Label Value Filled Content B ackground color : palette _ components/input/f illed/hoverF ill #000000, 9 % Underline B order color : palette _ components/input/standard/hoverB order #000000 B order weight : 2 Value Label O utlined Input B order color : palette _ components/input/outlined/hoverB order #000000 B order weight : 1 B order radius : shape borderR adius 4 Label Text color : palette text/secondary #000000, 6 0% State : Disabled by Variant Label Value Standard Input B order radius : 0 Label Text color : palette text/disabled #000000, 38% Value Text color : palette text/disabled #000000, 38% Underline B order color : palette _ components/input/standard/enabledB order #000000, 42% B order weight : 1 Label Value Filled Label Text color : palette text/disabled #000000, 38% Value Text color : palette text/disabled #000000, 38% Value Label O utlined Input B order color : palette _ components/input/outlined/enabledB order #000000, 23% B order weight : 1 B order radius : shape borderR adius 4 Value Text color : palette text/disabled #000000, 38% Label Text color : palette text/disabled #000000, 38% State : Error by Variant Label Value Standard Input B order radius : 0 Label Label Value Filled Label Text color : palette error/main #D32F 2F Underline Value Label O utlined Input B order color : palette error/main #D32F 2F B order weight : 1 B order radius : shape borderR adius 4 Modes palette Label Value Light Label Text color : palette text/secondary #000000, 6 0% Value Text color : palette text/primary #000000, 87 % Underline B order color : palette _ components/input/standard/enabledB order #000000, 42% Label Value Dark Label Text color : palette text/secondary #FFFFFF , 7 0% Value Text color : palette text/primary #FFFFFF Underline B order color : palette _ components/input/standard/enabledB order #FFFFFF , 42% Layout and spacing Label Value Placehol der H elp er t ext Value Placehol der Content Direction : Horizontal Alignment : Middle lef t Vertical resizing : Hug Horizontal resizing : F ill Label Value Placehol der H elp er t ext 8 Adorn. Start Container Direction : Horizontal Alignment : Middle lef t Vertical resizing : Hug Horizontal resizing : Hug Padding right: 8 Label Value Placehol der H elp er t ext Adorn. End Container Direction : Horizontal Alignment : Middle lef t Vertical resizing : Hug Horizontal resizing : Hug FIG MA As s e t Material UI f or F igma (and MUI X) (Community) Is merging disabled and error (in code, boolean properties) with states like hov ered and enabled ok? Nathan Curtis Is palette the term in the code API that developers use to swap light v dark? Nathan Curtis
  37. When Figma asset and code don’t agree © Copyright 2024

    • EightShapes LLC Figma Material UI for Figma (and MUI X) (Community) Code https://mui.com/material-ui/react-text-field/ Layout and spacing Label Value Placehol der Helper text 8 Adorn. Start Container Direction : Horizontal Alignment : Middle left Vertical resizing : Hug Horizontal resizing : Hug Padding right: 8 Label Value Placehol der Helper text Adorn. End Container Direction : Horizontal Alignment : Middle left Vertical resizing : Hug Horizontal resizing : Hug Label Value
  38. Assuring visual precision in Figma assets © Copyright 2024 •

    EightShapes LLC Properties Type {Title} {Details} {Drawer label} Basic ESDSV Alert Background color : ESDS Palette Neutral/88 #DEE0E1 Border color : ESDS Palette Neutral/43 #666E74 Decorative Icon Color : Secondary Informational ESDSV Alert Background color : ESDS Color Alert/Info/Background #EDF0FB Border color : ESDS Color Alert/Info/Element #0E68D4 Decorative Icon
  39. Design review (Updates in orange) © Copyright 2024 • EightShapes

    LLC Using automated specs before handoff Specification Figma Asset Design Docs Code Release Dev Docs Discovery Handoff Alignment Visual QA Exploration Design
  40. Opportunity Design feedback Problem Solution Designers spend considerable time laying

    out alternatives and describing detailed design decisions. Run plugin on emerging artwork, paste output into Figjam for critique © Copyright 2024 • EightShapes LLC
  41. Describe change Include a well written, consistently formatted version history

    © Copyright 2024 • EightShapes LLC Version history April 24, 2024 i Added dismissible property, layout and spacing and X icon butto• i Updated Basic Type color variables from generic values to new Alert / Basic semantic variables
  42. Mark what changed, how it changed Add outside strokes to

    highlight added, updated, and removed sections and content © Copyright 2024 • EightShapes LLC
  43. Version history April 24, 2024 P Added dismissible property, layout

    and spacing and X icon butto@ P Updated Basic Type color variables from generic values to new Alert / Basic semantic variables View Updates Link to branch with highlighted changes © Copyright 2024 • EightShapes LLC
  44. Leave main branch clean without change annotations © Copyright 2024

    • EightShapes LLC ESDSV Alert Anatomy {Title} {Details} {Drawer label} {Label} {Label} 1 2 3 4 5 6 7 8 ESDSV Alert 1 Width : ESDS Sizing platform/iOS default width 343 Border weight : 2 Decorative Icon 2 Depends on : ESDSV Icon Name : <Instance name> Size : 20x20 Title 3 Text style : Heading/5 Dismiss Icon 4 Depends on : ESDSV Icon Name : <Instance name> Size : 16x16 Color : Primary Details 5 Text style : Body/Small Details drawer 6 Depends on : ESDSV Details drawer State : Open Content area 7 Depends on : .Slot Action area 8 Depends on : ESDSV Alert actions Actions : Button + Link Properties Type {Title} {Details} {Drawer label} Basic ESDSV Alert Background color : ESDS Palette Neutral/94 #F0F1F1 Background color : ESDS Color Alert/Basic/Background #F0F1F1 Border color : ESDS Palette Neutral/67 #A6ACB0 Border color : ESDS Color Alert/Basic/Element #A6ACB0 Decorative Icon Color : Secondary {Title} {Details} {Drawer label} Informational ESDSV Alert Background color : ESDS Color Alert/Info/Background #EDF0FB Border color : ESDS Color Alert/Info/Element #0E68D4 Decorative Icon Color : Info {Title} {Details} {Drawer label} Success ESDSV Alert Background color : ESDS Color Alert/Success/Background #E6FDEB Border color : ESDS Color Alert/Success/Element #097D33 Decorative Icon Color : Success {Title} {Details} {Drawer label} Error ESDSV Alert Background color : ESDS Color Alert/Error/Background #FCF0EF Border color : ESDS Color Alert/Error/Element #D90936 Decorative Icon Color : Error {Title} {Details} {Drawer label} Warning ESDSV Alert Background color : ESDS Color Alert/Warning/Background #FCEFDA Border color : ESDS Color Alert/Warning/Element #785F07 Decorative Icon Color : Warning Dismissable {Title} {Details} {Drawer label} Property type : Boolean Default : false Associated layers : Dismiss Icon Details drawer {Title} {Details} {Drawer label} Property type : Boolean Default : true Associated layers : Details drawer Action area {Title} {Details} {Drawer label} {Label} {Label} Property type : Boolean Default : false Associated layers : Action area Content area {Title} {Details} {Drawer label} Property type : Boolean Default : false Associated layers : Content area Details? {Title} {Details} {Drawer label} Property type : Boolean Default : true Associated layers : Details Layout and spacing {Title} {Details} {Drawer label} {Label} {Label} {Title} {Details} {Drawer label} {Label} {Label} 8 16 16 16 16 ESDSV Alert Direction : Horizontal Alignment : Top left Vertical resizing : Hug Horizontal resizing : Fixed Item spacing: ESDS Density item-spacing/half-x 8 Padding : ESDS Density padding/1x 16 {Title} {Details} {Drawer label} {Label} {Label} {Title} {Details} {Drawer label} {Label} {Label} 16 16 ]-[ Direction : Vertical Alignment : Top left Vertical resizing : Hug Horizontal resizing : Fill Item spacing: ESDS Density item-spacing/1x 16 {Title} {Details} {Drawer label} {Label} {Label} {Title} {Details} {Drawer label} 12 12 ]-[ Direction : Vertical Alignment : Top left Vertical resizing : Hug Horizontal resizing : Fill Item spacing: ESDS Density item-spacing/three-quarter-x 12 {Title} {Details} {Drawer label} {Label} {Label} {Title} 24 ]-[ Direction : Horizontal Alignment : Top right Vertical resizing : Hug Horizontal resizing : Fill Item spacing: ESDS Density item-spacing/one-and-a-half-x 24 Modes ESDS Density {Title} {Details} {Drawer label} Cozy ESDSV Alert Item spacing: ESDS Density item-spacing/half-x 8 Padding : ESDS Density padding/1x 16 ]-[ Item spacing: ESDS Density item-spacing/1x 16 ]-[ Item spacing: ESDS Density item-spacing/three-quarter-x 12 ]-[ Item spacing: ESDS Density item-spacing/one-and-a-half-x 24 {Title} {Details} {Drawer label} Comfortable ESDSV Alert Item spacing: ESDS Density item-spacing/half-x 10 Padding : ESDS Density padding/1x 20 ]-[ Item spacing: ESDS Density item-spacing/1x 20 ]-[ Item spacing: ESDS Density item-spacing/three-quarter-x 15 ]-[ Item spacing: ESDS Density item-spacing/one-and-a-half-x 30 {Title} {Details} {Drawer label} Compact ESDSV Alert Item spacing: ESDS Density item-spacing/half-x 6 Padding : ESDS Density padding/1x 12 ]-[ Item spacing: ESDS Density item-spacing/1x 12 ]-[ Item spacing: ESDS Density item-spacing/three-quarter-x 9 ]-[ Item spacing: ESDS Density item-spacing/one-and-a-half-x 18 ESDS Color {Title} {Details} {Drawer label} Light Title Text color : ESDS Color Text/Primary #0E1114 Details Text color : ESDS Color Text/Primary #0E1114 {Title} {Details} {Drawer label} Dark Title Text color : ESDS Color Text/Primary #FFFFFF Details Text color : ESDS Color Text/Primary #FFFFFF ESDS Shape {Title} {Details} {Drawer label} Subtle round ESDSV Alert Border radius : ESDS Shape border radius/module 4 {Title} {Details} {Drawer label} Round ESDSV Alert Border radius : ESDS Shape border radius/module 16 {Title} {Details} {Drawer label} Squared ESDSV Alert Border radius : ESDS Shape border radius/module 0 Version history April 24, 2024 ) Added dismissible property, layout and spacing and X icon butto ) U pdated Basic Type color v ariables from generic v alues to new Alert / Basic semantic v ariables View U pdates
  45. © Copyright 2023 • EightShapes LLC Specs plugin Figma asset

    quality Poor Poor Spec output quality Automation depends on quality
  46. © Copyright 2023 • EightShapes LLC {Label} {Title} {Description} {Label}

    {Label} 16 24 24 24 24 8 4 8 16 Card Item spacing / Margin Padding Elements How layout is spec’ed, traditionally
  47. © Copyright 2023 • EightShapes LLC {Label} {Title} {Description} {Label}

    {Label} 16 24 24 24 24 8 4 8 16 Card How layout works, hierarchically { M e ta data } {Title} {Description} { M e ta data } {Title} 4 {label} {label} 8 8 8 12 12 {Label} {Label} {Label} {Label} 16 {Label} {Title} {Description} {Label} {Label} {Label} {Title} {Description} {Label} {Label} { M e ta data } {Title} {Description} { M e ta data } {Title} {Description} 8 {Label} {Title} {Description} {Label} {Label} {Label} {Title} {Description} {Label} {Label} 16 24 24 24 24
  48. © Copyright 2023 • EightShapes LLC “How strong are your

    skills in laying out custom solutions using Figma autolayout?” Very poor I’m OK Very strong 1 2 3 4 5 What designers said
  49. © Copyright 2023 • EightShapes LLC “How strong are your

    skills in laying out custom solutions using Figma autolayout?” Very poor I’m OK How designers performed Very strong 1 2 3 4 5 What designers said
  50. © Copyright 2023 • EightShapes LLC Self assessed skill Look

    up “Dunning-Kruger Effect” Actual skill VERY STRONG VERY POOR VERY POOR VERY STRONG Group 1 Stronger, humbler Group 2 Less strong, sometimes overconfident Self-assessed AutoLayout skills
  51. © Copyright 2023 • EightShapes LLC Using automation to share

    ideas As scratchpad to shared ideas Produced via EightShapes Specs Produced manually As formal addition consistent with in-house spec format Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Value Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Value Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text 8 Frame 38 Direction : Vertical Alignment : Top left Vertical resizing : Hug Horizontal resizing : Fixed Item spacing: 8 Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Value Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label 12 Frame 40 Direction : Horizontal Alignment : Top left Vertical resizing : Hug Horizontal resizing : Fill Item spacing: 12 Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Value Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Value Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text 12 Frame 39 Direction : Horizontal Alignment : Top left Vertical resizing : Hug Horizontal resizing : Fill Item spacing: 12 {Label text} Lorem ipsum dolor sit amet, consectetur adipiscing elit Value {Error text} Mauris ultrices quis lorem nec iaculis. Aliquam faucibus laoreet leo vitae commodo. {Helper text} Duis aliquam, erat ac varius efficitur, erat urna malesuada nibh, ut dapibus lacus eros quis dolor. Nulla luctus tempor magna at pulvinar. Phasellus hendrerit laoreet ante, ac commodo sapien ultrices ac. Nunc bibendum risus vestibulum consequat tempor. 2 1 2X Bottom 1 Container: L Columns 2 Container: [ Direction {Label text} Lorem ipsum dolor sita, consectetur adipiscing elit Value {Error text} Mauris ultrices quis lorem nec iaculis. Aliquam faucibus laoreet leo vitae commodo. {Helper text} Duis aliquam, erat ac varius efficitur, erat urna malesuada nibh, ut dapibus lacus eros quis dolor. Nulla luctus tempor magna at pulvinar. Phasellus hendrerit 2 1 3X Right 1 Container: L Columns 2 Container: [ Direction
  52. © Copyright 2024 • EightShapes LLC So, are you expecting

    me to code the layer structure exactly as you’ve spec’ed it? Because... no.” — Me or any reasonable developer coping with constraints of frameworks, systems, and platforms Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Value Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Value Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text 8 Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Value Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label 12 Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Value Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Value Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text 12 Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Value Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Value Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text 4
  53. © Copyright 2024 • EightShapes LLC (Automated) Specs are disposable.

    Like all waste on the path to digital experiences people use, I revel in that disposability.
  54. © Copyright 2024 • EightShapes LLC Specs are communication. Automation

    bends more designers to sharing more technical ideas more clearly and quickly. That’s the plugin’s mission
  55. © Copyright 2024 • EightShapes LLC Use your specs and

    tools to... Communicate design intent Communicate technical concepts and alternatives Assure quality Communicate and record change over time Prescribe the only way to code everything
  56. © Copyright 2024 • EightShapes LLC Upcoming workshops Design tokens

    and UI component architecture Hosted by Smashing Workshops Token taxonomy Token naming Anatomy Configuration Composition and layout Specifications Process Process from design to code Planning generations Team models Planning initiatives Objectives Measurement Support Communications Vision & mission https://smashingconf.com/online-workshops/ Hosted by Into Design Systems https://ti.to/into-design-systems/workshop Design system planning and process Architecting Operating June 6–7 and 13–14, 2024 June 10-11, 2024