background-image: url(img/slide_1.png) background-size: contain <!-- #onBrand --> <!-- creating a design system for shiny and rmarkdown --> --- background-image: url(img/slide_2.png) background-size: contain <!-- #Bad vs Good UI --> <!-- Image with inconsistent UI design: photos are different widths, headers are different sizes, fonts are different colors, a strong horizontal line... why?! --> --- background-image: url(img/slide_3.png) background-size: contain <!-- #what is a design system? --> <!-- Rules, constraints, and principles implemented in design and code --> --- background-image: url(img/slide_4.png) background-size: contain <!-- FIXME --> <!-- #Strategic use of color --> <!-- Rule: must pass minimum color contrast ratio --> <!-- Constraint: number of colors in the palette --> <!-- Principle:color should be used in a meaningful way --> --- background-image: url(img/slide_5.png) background-size: contain <!-- #error message --> <!-- Using appropriate color contrast, colors from within the company's palette, and the red color denotes that there is an error --> <!-- image of Error text in dark maroon with a light red under it to show the rule of contrast, the exact shades of permissable red, and that red means error --> --- background-image: url(img/slide_6.png) background-size: contain <!-- #creating a system --> <!-- a flow diagram with typography, color, and padding going into components, and components making up a webpage --> --- background-image: url(img/slide_7.png) background-size: contain <!-- #interrelated, independent parts --> <!-- a single component, a pink box --> --- background-image: url(img/slide_8.png) background-size: contain <!-- #interrelated, independent parts --> <!-- the single pink box is under a grey square, the button is always under this type of plot --> --- background-image: url(img/slide_9.png) background-size: contain <!-- #interrelated, independent parts --> <!-- the grey and pink box are placed within a page with another gray box denoting a footer as well as a sidebar --> --- background-image: url(img/slide_10.png) background-size: contain <!-- #design kit --> <!-- a collection of assets that contains a set of design elements such as UI components and styles --> --- background-image: url(img/slide_11.png) background-size: contain .absolute-default-button[ <button style="height:70px;width:130px;">TEXT</button> ] <!-- # COMPARING BUTTONS --> <!-- ## From default browser, to bootstrap, to my own! --> <!-- an html button using tags$button --> --- background-image: url(img/slide_12.png) background-size: contain .absolute-default-button[ <button style="height:70px;width:130px;">TEXT</button> ] .absolute-shiny-button[ <button type="button" class="btn btn-outline-dark" style="height:80px;width: 135px;">TEXT</button> ] <!-- # COMPARING BUTTONS --> <!-- ## From default browser, to bootstrap, to my own! --> <!-- a shiny actionButton --> --- background-image: url(img/slide_13.png) background-size: contain .absolute-default-button[ <button style="height:70px;width:130px;">TEXT</button> ] .absolute-shiny-button[ <button type="button" class="btn btn-outline-dark" style="height:80px;width: 135px;">TEXT</button> ] .absolute-button[
TEXT
] <script> const buttons = document.querySelectorAll('.ripple'); buttons.forEach(btn => { btn.addEventListener('click', function (e) { let x = e.clientX - e.target.offsetLeft; let y = e.clientY - e.target.offsetTop; let ripples = document.createElement('span'); ripples.style.left = x + 'px'; ripples.style.top = y + 'px'; this.appendChild(ripples); setTimeout(() => { ripples.remove() },1000); }); }); </script> <!-- # COMPARING BUTTONS --> <!-- ## From default browser, to bootstrap, to my own! --> <!-- the custom primary button we're going to create! --> --- background-image: url(img/slide_14.png) background-size: contain <!-- # my design kit --> <!-- a schematic of the package structure, where the R folder contains a file called btn.R and an inst folder contains a css folder with btn.css inside, and a js folder with btn.js inside --> --- background-image: url(img/slide_15.png) background-size: contain <!-- going over the R file --> --- background-image: url(img/slide_16.png) background-size: contain <!-- going over the css --> <!-- consider all states in your design kit --> --- background-image: url(img/slide_17.png) background-size: contain <!-- FIX --> <!-- going over the JS file --> --- background-image: url(img/slide_18.png) background-size: contain <!-- #MAYAS DESIGN KIT--> <!-- An example library (ON GITHUB!) for my personal brand --> <a class="link-to-github" href="https://mayagans.github.io/my_designkit/"></a> --- background-image: url(img/slide_19.png) background-size: contain <!-- #Design Kit Elements --> .absolute-text-input[
test
] .absolute-tab-input[
TAB
TAB
TAB
] <script> var tabs = document.getElementsByClassName('Tab'); Array.prototype.forEach.call(tabs, function(tab) { tab.addEventListener('click', setActiveClass); }); function setActiveClass(evt) { Array.prototype.forEach.call(tabs, function(tab) { tab.classList.remove('active'); }); evt.currentTarget.classList.add('active'); } </script> <style> .Panel__body { background-color: #f2f2f2; padding: 10px 20px; } .Tabs { position: relative; background-color: #fff; margin: 0; padding: 0; list-style: none; width: max-content; } .Tabs:after { content: ' '; display: table; clear: both; } .Tabs__tab { float: left; width: 33.333%; text-align: center; } .Tabs__tab:first-child.active ~ .Tabs__presentation-slider { transform: translateX(0) scaleX(0.333); } .Tabs__tab:nth-child(2).active ~ .Tabs__presentation-slider { transform: translateX(33.333%) scaleX(0.333); } .Tabs__tab:nth-child(3).active ~ .Tabs__presentation-slider { transform: translateX(calc(33.333% * 2)) scaleX(0.333); } .Tabs__presentation-slider { position: absolute; bottom: 0; left: 0; width: 100%; height: 2px; background-color: var(--primary); transform-origin: 0 0; transition: transform 0.25s; } .Tab { font-weight: 600; } .Tab > a { display: block; padding: 10px 12px; text-decoration: none; color: darkgray; transition: color 0.15s; } .Tab.active > a { color: var(--primary); text-decoration: none; } .Tab:hover > a { color: var(--primary); background-color: var(--secondary); text-decoration: none; } </style> --- background-image: url(img/slide_20.png) background-size: contain <!-- # What to Include --> <!-- Navigation bars and menus Icons, images, and graphics Grids, cards, and layouts Buttons, charts, and tabs Headers and footers Social media share buttons Colors and styles Texts and typography Page templates Interactions and animations --> --- background-image: url(img/slide_21.png) background-size: contain <!-- # Further Reading --> <!-- Outstanding User Interfaces with Shiny https://unleash-shiny.rinterface.com/ --> <!-- JAVASCRIPT FOR R https://book.javascript-for-r.com/ --> <!-- REFACTORING UI https://www.refactoringui.com/book --> --- background-image: url(img/slide_22.png) background-size: contain <!-- #Contact Me! --> <!-- Maya Gans --> <!-- data viz engineer --> <!-- @Mayacelium --> <!-- maya.gans@atorusresearch.com --> <style> @import url('https://fonts.googleapis.com/css2?family=Poppins&display=swap'); :root { --font: Poppins !important; --primary: #E91E63 !important; --secondary: #FCE4EC !important; } .absolute-button { position: absolute; left: 120px; font: var(--primary); bottom: 90px; } .absolute-button button { font-size: 2rem !important; font: var(--primary); } .absolute-text-input { width: 300px; position: absolute; right: 45px; top: 100px; font: var(--primary); } .absolute-tab-input { width: 300px; position: absolute; right: 45px; bottom: 150px; } .link-to-github { position: absolute; top: 150px; left: 165px; height: 500px; width: 950px; } .absolute-default-button { position: absolute; top: 115px; left: 120px; } .btn-outline-dark { color: black; background-color: white; background-image: none; border-color: darkgrey; } .btn-outline-dark:hover { background: darkgrey; } .absolute-shiny-button { top: 315px; left: 120px; position: absolute; } </style>