Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The art of building framework independent desig...
Search
Stefan Nieuwenhuis
April 04, 2019
Technology
260
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The art of building framework independent design systems
Video:
https://www.youtube.com/watch?v=ZusytL3s8Zw
Stefan Nieuwenhuis
April 04, 2019
More Decks by Stefan Nieuwenhuis
See All by Stefan Nieuwenhuis
NHSWD/4NG: The JavaScript Big Three
stefannhs
0
33
Taming huge Angular applications at bol.com
stefannhs
0
440
Taming huge enterprise applications with Mono repos, Design Systems & Web Components
stefannhs
0
150
Micro Frontends & Design Systems, built with Angular and Stencil
stefannhs
0
460
Building a framework independent component library with StencilJS
stefannhs
0
280
Other Decks in Technology
See All in Technology
AIで楽になるはずが、なぜ疲れる?
kinopeee
0
120
コンテナ・K8s研修【MIXI 26新卒技術研修】#2
mixi_engineers
PRO
1
270
どこまでAIに任せるか 〜確率論と決定論の境界決定〜
shukob
0
550
AI エージェント時代のデジタルアイデンティティ
fujie
0
120
なぜMIXIはゼロトラスト基盤として クラウドフレアを選んだのか - Cloudflare Peer Point SASE User Voices
mixi_engineers
PRO
2
110
副作用のある Lambda でも Lambda Power Tuning は使えるのか / lambda-power-tuning-side-effects
koukihosaka
2
160
QAと開発の両側から進める AI活用 -QAプロセスAI支援ツールキットと Inner Loop / Outer Loopの取り組み-
legalontechnologies
PRO
2
150
信頼できるテスティングAIをどう育てるか?
odan611
0
120
データエンジニアリングとドメイン駆動設計
masuda220
PRO
15
2.7k
キャリアLT会#3
beli68
2
280
【公開用】AI_Dev_Ex2026_AI_登壇資料
matsuritechnologies
PRO
2
680
Claude Mythos、Fable...フロンティアAIの最新動向と企業のセキュリティ対策
flatt_security
0
160
Featured
See All Featured
Leo the Paperboy
mayatellez
8
1.9k
Writing Fast Ruby
sferik
630
63k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Typedesign – Prime Four
hannesfritz
42
3.1k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
We Have a Design System, Now What?
morganepeng
55
8.2k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Side Projects
sachag
455
43k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
190
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.6k
What's in a price? How to price your products and services
michaelherold
247
13k
Transcript
@stefannhs @stefannhs @stefannhs
@stefannhs The art of building framework independent design systems Software
Engineer Archaeology Waterpolo Stefan Nieuwenhuis Skydiving Books Developer Avocado
@stefannhs 1999 - bol.com launch > 2000 - new categories
2011 - retail platform 2013 - €1 bln. turnover
@stefannhs Monolith Architecture Server side app User Interface Database
@stefannhs Performance Less cross cutting concerns Planning & Design Less
operational overhead Security
@stefannhs Performance Less cross cutting concerns Planning & Design Less
operational overhead Security
@stefannhs Microservices
@stefannhs Transparency Independency Scalability
@stefannhs Transparency Independency Scalability Consistency
@stefannhs Design System
@stefannhs Pattern Library
@stefannhs // Corporate colors $palette-blue-main: rgb(051,102,204) !default; $palette-blue-dark: rgb(014,052,144) !default;
$palette-blue-light: rgb(058,125,231) !default; $palette-blue-hover: rgb(245,247,252) !default; // Secondary colors $palette-red-main: rgb(248,087,105) !default; $palette-orange-main: rgb(251,120,093) !default; $palette-yellow-main: rgb(255,162,078) !default; $palette-lime-main: rgb(150,210,113) !default; $palette-green-main: rgb(051,204,131) !default; Style guide
@stefannhs
@stefannhs Generic No framework lock-in Flexible Reusable Development speed
@stefannhs <h1> My Awesome button </h1> <p>This button is made
possible w/ Web Components!</p> <my-button>Click me</my-button>
@stefannhs <template id="myButton"> <style>button { border: 2px solid red; border-radius:
5px; background: tomato; padding: 10px; color: white; font-weight: bold; text-transform: uppercase; cursor: pointer; }</style> <button><slot/></button> </template>
@stefannhs class MyButtonElement extends HTMLElement { constructor() { super(); const
template = document.getElementById('myButton'); // Shadow DOM this.attachShadow({ mode: 'closed' }); this.shadowRoot.appendChild( template.content.cloneNode(true)); } }
@stefannhs class MyButtonElement extends HTMLElement { constructor() { super(); const
template = document.getElementById('myButton'); // Shadow DOM this.attachShadow({ mode: 'open' }); this.shadowRoot.appendChild( template.content.cloneNode(true)); } } // Define Custom Element customElements.define('my-button', MyButtonElement);
@stefannhs <h1> My Awesome button </h1> <p>This button is made
possible w/ Web Components!</p> <my-button>Click me</my-button>
@stefannhs Compatibility Easy API Performance Future-proof
@stefannhs npm init stencil
@stefannhs // Stencil controller import { Component, Prop } from
'@stencil/core'; @Component({ tag: 'my-component', styleUrl: 'my-component.css', shadow: true }) export class MyComponent { render() { return <div>Hello world!</div>; } }
@stefannhs // Stencil controller import { Component, Prop } from
'@stencil/core'; @Component({ tag: 'my-button', styleUrl: 'my-button.css', shadow: true }) export class MyButtonElement { render() { return <button><slot/></button>; } }
@stefannhs npm run build
@stefannhs ... <script src="/build/mycomponent.js"></script> </head> <body> <h1> My Awesome button
</h1> <p>This button is made possible w/ Web Components!</p> <my-button>Click me</my-button> </body>
@stefannhs Extensive config Auto docs generation Bundling Dev Server Typed
components Plugins Polyfills
@stefannhs Mono Repository
@stefannhs One single source of truth Reusability Versioning Scalable Experience
@stefannhs
@stefannhs { "name": "@awesome-components-lib/buttons", "version": "5.0.1", "description": "Button Component", ...
} { "name": "@awesome-components-lib/footer", "version": "1.0.0", "description": "Footer Component", ... } Semantic Versioning No interdependencies Scoped packages
@stefannhs
@stefannhs Design System Holy Grail of Consistency
@stefannhs Icons made by Freepik from www.flaticon.com is licensed by
CC 3.0 BY DM’s are open! @stefannhs