design
tooling
systems⛏
"
@luka5c0m
@ddprrt
design systems
design systems engineering
patterns
components
prototypes
and tools…
the sketchmine
a place to scrape diamonds
when did you last ship
a sketchfile into production?
Initial idea
UX + design
Initial idea
UX + design
Initial idea
Sketch lib
UX + design
Initial idea
Product
code
Sketch lib
UX + design
Initial idea
Angular
component lib
Product
code
Sketch lib
UX + design
Initial idea
Angular
component lib
Product
code
Sketch lib
Barista
Design System
UX + design
Initial idea
Angular
component lib
Product
code
Sketch lib
Barista
Design System
UX + design
Initial idea
Angular
component lib
Product
code
Sketch lib
Barista
Design System
UX + design
Initial idea
Angular
component lib
Product
code
Sketch lib
Barista
Design System
UX + design
Initial idea
Angular
component lib
Product
code
Sketch lib
Barista
Design System
UX + design
Initial idea
Angular
component lib
Product
code
Sketch lib
Barista
Design System
Angular
component lib
Barista
Design System
Sketch lib
Product
code
UX + design
the sketchmine
a place to scrape diamonds
Generating designs

from code d#
Generating designs

from code d#
$➜ yarn global add @sketchmine/sketch-builder
Generating designs

from code d#
$➜ skm-sketch-builder
So now we can draw

any web page
but what if we want to draw
our components library?
sketch-builder
generates a .sketch file from any website
sketch-builder
app-builder
generates a .sketch file from any website
generates the angular application that can be drawn
sketch-builder
code-analyser
app-builder
generates a .sketch file from any website
generates the angular application that can be drawn
generates an abstract syntax tree out of the component library
sketch-builder
code-analyser
app-builder
angular components
generates a .sketch file from any website
generates the angular application that can be drawn
generates an abstract syntax tree out of the component library
sketch-builder
%&'
sketch-builder
%&'
el.getBoundingClientRect() as DOMRect;
sketch-builder
%&'
const style = getComputedStyle(element);
sketch-builder
(⛏
%&'
background-color: #00A1B2
font-size: 16px
font-family: Bernina Sans
width: auto
height: 32px
text-align: center
const style = getComputedStyle(element);
sketch-builder
app-builder
) %&
app-builder
) %&'
'
'
'
app-builder
) %&'
'
'
'
app-builder
) %&''''
code-analyser export type ButtonVariant = 'primary' | 'secondary' | 'nested';
export type DtButtonThemePalette = 'main' | 'warning' | 'cta';
/**
* Dynatrace design button.
* @design-focusable
*/
@Component({
selector: `button[dt-button], button[dt-icon-button]`,
inputs: ['disabled', 'color'],
})
export class DtButton extends _DtButtonMixinBase
implements CanDisable, CanColor<DtButtonThemePalette> {
@Input()
get variant(): ButtonVariant { ... }
set variant(value: ButtonVariant) { ... }
private _variant: ButtonVariant;
@ContentChildren(DtIcon) _icons: QueryList<DtIcon>;
focus(): void { ... }
private _somePrivateMethod(): void { }
private _yetAnotherPrivateMethod( ...attributes: string[]): boolean { ... }
}
code-analyser export type ButtonVariant = 'primary' | 'secondary' | 'nested';
export type DtButtonThemePalette = 'main' | 'warning' | 'cta';
/**
* Dynatrace design button.
* @design-focusable
*/
@Component({
selector: `button[dt-button], button[dt-icon-button]`,
inputs: ['disabled', 'color'],
})
export class DtButton extends _DtButtonMixinBase
implements CanDisable, CanColor<DtButtonThemePalette> {
@Input()
get variant(): ButtonVariant { ... }
set variant(value: ButtonVariant) { ... }
private _variant: ButtonVariant;
@ContentChildren(DtIcon) _icons: QueryList<DtIcon>;
focus(): void { ... }
private _somePrivateMethod(): void { }
private _yetAnotherPrivateMethod( ...attributes: string[]): boolean { ... }
}
*
variants: [
{
name: “button/disabled”,
changes: [{
type: “property”,
key: “disabled”,
Value: “true”,
}],
}
code-analyser export type ButtonVariant = 'primary' | 'secondary' | 'nested';
export type DtButtonThemePalette = 'main' | 'warning' | 'cta';
/**
* Dynatrace design button.
* @design-focusable
*/
@Component({
selector: `button[dt-button], button[dt-icon-button]`,
inputs: ['disabled', 'color'],
})
export class DtButton extends _DtButtonMixinBase
implements CanDisable, CanColor<DtButtonThemePalette> {
@Input()
get variant(): ButtonVariant { ... }
set variant(value: ButtonVariant) { ... }
private _variant: ButtonVariant;
@ContentChildren(DtIcon) _icons: QueryList<DtIcon>;
focus(): void { ... }
private _somePrivateMethod(): void { }
private _yetAnotherPrivateMethod( ...attributes: string[]): boolean { ... }
}
+
}, {
name: “button/primary/default”,
changes: [{
type: “property”,
key: “variant”,
value: “”primary””,
}],
}
…
component: ‘DtButton’,
selector: ‘button[dt-button]’
*
%&)*
'
'
%&)* ''
a pure example ,
the generated library -
can I work with the library?
So which other tools are in
the mine?
So which other tools are in
the mine?
validating our
designs
.
Sketch Validation
validating our
designs
.
Sketch Validation
let’s / it ☝
%&)*'
%&)* ''
⛏
honorable mentions
Slide about usKatrin Freihofner

@Ka_TriN_F
devone.at
need that?
https://github.com/Dynatrace/sketchmine
@luka5c0m
npm @sketchmine
@ddprrt

Sketchmine: Design Systems Tooling