Compare commits
	
		
			2 Commits
		
	
	
		
			fb5bde70ef
			...
			e2ce420764
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						e2ce420764
	
				 | 
					
					
						|||
| 
						
						
							
						
						7583883d64
	
				 | 
					
					
						
							
								
								
									
										30
									
								
								src/resources/css/animations/ripple.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/resources/css/animations/ripple.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					:root {
 | 
				
			||||||
 | 
					    --ripple-color: #fff;
 | 
				
			||||||
 | 
					    --ripple-radius: 9999px;
 | 
				
			||||||
 | 
					    --ripple-duration: 600ms;
 | 
				
			||||||
 | 
					    --ripple-timing-function: linear;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.ripple {
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    top: 0;
 | 
				
			||||||
 | 
					    left: 0;
 | 
				
			||||||
 | 
					    bottom: 0;
 | 
				
			||||||
 | 
					    right: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.ripple span {
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    border-radius: var(--ripple-radius);
 | 
				
			||||||
 | 
					    opacity: 0.5;
 | 
				
			||||||
 | 
					    background: var(--ripple-color);
 | 
				
			||||||
 | 
					    transform: scale(0);
 | 
				
			||||||
 | 
					    animation: ripple var(--ripple-duration) var(--ripple-timing-function);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@keyframes ripple {
 | 
				
			||||||
 | 
					    to {
 | 
				
			||||||
 | 
					        transform: scale(4);
 | 
				
			||||||
 | 
					        opacity: 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										74
									
								
								src/resources/css/resets/andy-bell.reset.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								src/resources/css/resets/andy-bell.reset.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,74 @@
 | 
				
			|||||||
 | 
					/* Box sizing rules */
 | 
				
			||||||
 | 
					*,
 | 
				
			||||||
 | 
					*::before,
 | 
				
			||||||
 | 
					*::after {
 | 
				
			||||||
 | 
					  box-sizing: border-box;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Remove default margin */
 | 
				
			||||||
 | 
					body,
 | 
				
			||||||
 | 
					h1,
 | 
				
			||||||
 | 
					h2,
 | 
				
			||||||
 | 
					h3,
 | 
				
			||||||
 | 
					h4,
 | 
				
			||||||
 | 
					p,
 | 
				
			||||||
 | 
					figure,
 | 
				
			||||||
 | 
					blockquote,
 | 
				
			||||||
 | 
					dl,
 | 
				
			||||||
 | 
					dd {
 | 
				
			||||||
 | 
					  margin: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */
 | 
				
			||||||
 | 
					ul[role='list'],
 | 
				
			||||||
 | 
					ol[role='list'] {
 | 
				
			||||||
 | 
					  list-style: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Set core root defaults */
 | 
				
			||||||
 | 
					html:focus-within {
 | 
				
			||||||
 | 
					  scroll-behavior: smooth;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Set core body defaults */
 | 
				
			||||||
 | 
					body {
 | 
				
			||||||
 | 
					  min-height: 100vh;
 | 
				
			||||||
 | 
					  text-rendering: optimizeSpeed;
 | 
				
			||||||
 | 
					  line-height: 1.5;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* A elements that don't have a class get default styles */
 | 
				
			||||||
 | 
					a:not([class]) {
 | 
				
			||||||
 | 
					  text-decoration-skip-ink: auto;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Make images easier to work with */
 | 
				
			||||||
 | 
					img,
 | 
				
			||||||
 | 
					picture {
 | 
				
			||||||
 | 
					  max-width: 100%;
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Inherit fonts for inputs and buttons */
 | 
				
			||||||
 | 
					input,
 | 
				
			||||||
 | 
					button,
 | 
				
			||||||
 | 
					textarea,
 | 
				
			||||||
 | 
					select {
 | 
				
			||||||
 | 
					  font: inherit;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Remove all animations, transitions and smooth scroll for people that prefer not to see them */
 | 
				
			||||||
 | 
					@media (prefers-reduced-motion: reduce) {
 | 
				
			||||||
 | 
					  html:focus-within {
 | 
				
			||||||
 | 
					   scroll-behavior: auto;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  *,
 | 
				
			||||||
 | 
					  *::before,
 | 
				
			||||||
 | 
					  *::after {
 | 
				
			||||||
 | 
					    animation-duration: 0.01ms !important;
 | 
				
			||||||
 | 
					    animation-iteration-count: 1 !important;
 | 
				
			||||||
 | 
					    transition-duration: 0.01ms !important;
 | 
				
			||||||
 | 
					    scroll-behavior: auto !important;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										48
									
								
								src/resources/css/resets/eric-meyer.reset.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								src/resources/css/resets/eric-meyer.reset.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
				
			|||||||
 | 
					/* http://meyerweb.com/eric/tools/css/reset/ 
 | 
				
			||||||
 | 
					   v2.0 | 20110126
 | 
				
			||||||
 | 
					   License: none (public domain)
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					html, body, div, span, applet, object, iframe,
 | 
				
			||||||
 | 
					h1, h2, h3, h4, h5, h6, p, blockquote, pre,
 | 
				
			||||||
 | 
					a, abbr, acronym, address, big, cite, code,
 | 
				
			||||||
 | 
					del, dfn, em, img, ins, kbd, q, s, samp,
 | 
				
			||||||
 | 
					small, strike, strong, sub, sup, tt, var,
 | 
				
			||||||
 | 
					b, u, i, center,
 | 
				
			||||||
 | 
					dl, dt, dd, ol, ul, li,
 | 
				
			||||||
 | 
					fieldset, form, label, legend,
 | 
				
			||||||
 | 
					table, caption, tbody, tfoot, thead, tr, th, td,
 | 
				
			||||||
 | 
					article, aside, canvas, details, embed, 
 | 
				
			||||||
 | 
					figure, figcaption, footer, header, hgroup, 
 | 
				
			||||||
 | 
					menu, nav, output, ruby, section, summary,
 | 
				
			||||||
 | 
					time, mark, audio, video {
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					    border: 0;
 | 
				
			||||||
 | 
					    font-size: 100%;
 | 
				
			||||||
 | 
					    font: inherit;
 | 
				
			||||||
 | 
					    vertical-align: baseline;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* HTML5 display-role reset for older browsers */
 | 
				
			||||||
 | 
					article, aside, details, figcaption, figure, 
 | 
				
			||||||
 | 
					footer, header, hgroup, menu, nav, section {
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					body {
 | 
				
			||||||
 | 
					    line-height: 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					ol, ul {
 | 
				
			||||||
 | 
					    list-style: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					blockquote, q {
 | 
				
			||||||
 | 
					    quotes: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					blockquote:before, blockquote:after,
 | 
				
			||||||
 | 
					q:before, q:after {
 | 
				
			||||||
 | 
					    content: '';
 | 
				
			||||||
 | 
					    content: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					table {
 | 
				
			||||||
 | 
					    border-collapse: collapse;
 | 
				
			||||||
 | 
					    border-spacing: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										349
									
								
								src/resources/css/resets/nicolas-allagher.normalize.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										349
									
								
								src/resources/css/resets/nicolas-allagher.normalize.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,349 @@
 | 
				
			|||||||
 | 
					/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Document
 | 
				
			||||||
 | 
					   ========================================================================== */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 1. Correct the line height in all browsers.
 | 
				
			||||||
 | 
					 * 2. Prevent adjustments of font size after orientation changes in iOS.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					html {
 | 
				
			||||||
 | 
					  line-height: 1.15; /* 1 */
 | 
				
			||||||
 | 
					  -webkit-text-size-adjust: 100%; /* 2 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Sections
 | 
				
			||||||
 | 
					   ========================================================================== */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Remove the margin in all browsers.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					body {
 | 
				
			||||||
 | 
					  margin: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Render the `main` element consistently in IE.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					main {
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Correct the font size and margin on `h1` elements within `section` and
 | 
				
			||||||
 | 
					 * `article` contexts in Chrome, Firefox, and Safari.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					h1 {
 | 
				
			||||||
 | 
					  font-size: 2em;
 | 
				
			||||||
 | 
					  margin: 0.67em 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Grouping content
 | 
				
			||||||
 | 
					   ========================================================================== */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 1. Add the correct box sizing in Firefox.
 | 
				
			||||||
 | 
					 * 2. Show the overflow in Edge and IE.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					hr {
 | 
				
			||||||
 | 
					  box-sizing: content-box; /* 1 */
 | 
				
			||||||
 | 
					  height: 0; /* 1 */
 | 
				
			||||||
 | 
					  overflow: visible; /* 2 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 1. Correct the inheritance and scaling of font size in all browsers.
 | 
				
			||||||
 | 
					 * 2. Correct the odd `em` font sizing in all browsers.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pre {
 | 
				
			||||||
 | 
					  font-family: monospace, monospace; /* 1 */
 | 
				
			||||||
 | 
					  font-size: 1em; /* 2 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Text-level semantics
 | 
				
			||||||
 | 
					   ========================================================================== */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Remove the gray background on active links in IE 10.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					a {
 | 
				
			||||||
 | 
					  background-color: transparent;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 1. Remove the bottom border in Chrome 57-
 | 
				
			||||||
 | 
					 * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					abbr[title] {
 | 
				
			||||||
 | 
					  border-bottom: none; /* 1 */
 | 
				
			||||||
 | 
					  text-decoration: underline; /* 2 */
 | 
				
			||||||
 | 
					  text-decoration: underline dotted; /* 2 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Add the correct font weight in Chrome, Edge, and Safari.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					b,
 | 
				
			||||||
 | 
					strong {
 | 
				
			||||||
 | 
					  font-weight: bolder;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 1. Correct the inheritance and scaling of font size in all browsers.
 | 
				
			||||||
 | 
					 * 2. Correct the odd `em` font sizing in all browsers.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					code,
 | 
				
			||||||
 | 
					kbd,
 | 
				
			||||||
 | 
					samp {
 | 
				
			||||||
 | 
					  font-family: monospace, monospace; /* 1 */
 | 
				
			||||||
 | 
					  font-size: 1em; /* 2 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Add the correct font size in all browsers.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					small {
 | 
				
			||||||
 | 
					  font-size: 80%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Prevent `sub` and `sup` elements from affecting the line height in
 | 
				
			||||||
 | 
					 * all browsers.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub,
 | 
				
			||||||
 | 
					sup {
 | 
				
			||||||
 | 
					  font-size: 75%;
 | 
				
			||||||
 | 
					  line-height: 0;
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  vertical-align: baseline;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub {
 | 
				
			||||||
 | 
					  bottom: -0.25em;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sup {
 | 
				
			||||||
 | 
					  top: -0.5em;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Embedded content
 | 
				
			||||||
 | 
					   ========================================================================== */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Remove the border on images inside links in IE 10.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					img {
 | 
				
			||||||
 | 
					  border-style: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Forms
 | 
				
			||||||
 | 
					   ========================================================================== */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 1. Change the font styles in all browsers.
 | 
				
			||||||
 | 
					 * 2. Remove the margin in Firefox and Safari.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button,
 | 
				
			||||||
 | 
					input,
 | 
				
			||||||
 | 
					optgroup,
 | 
				
			||||||
 | 
					select,
 | 
				
			||||||
 | 
					textarea {
 | 
				
			||||||
 | 
					  font-family: inherit; /* 1 */
 | 
				
			||||||
 | 
					  font-size: 100%; /* 1 */
 | 
				
			||||||
 | 
					  line-height: 1.15; /* 1 */
 | 
				
			||||||
 | 
					  margin: 0; /* 2 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Show the overflow in IE.
 | 
				
			||||||
 | 
					 * 1. Show the overflow in Edge.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button,
 | 
				
			||||||
 | 
					input { /* 1 */
 | 
				
			||||||
 | 
					  overflow: visible;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Remove the inheritance of text transform in Edge, Firefox, and IE.
 | 
				
			||||||
 | 
					 * 1. Remove the inheritance of text transform in Firefox.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button,
 | 
				
			||||||
 | 
					select { /* 1 */
 | 
				
			||||||
 | 
					  text-transform: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Correct the inability to style clickable types in iOS and Safari.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button,
 | 
				
			||||||
 | 
					[type="button"],
 | 
				
			||||||
 | 
					[type="reset"],
 | 
				
			||||||
 | 
					[type="submit"] {
 | 
				
			||||||
 | 
					  -webkit-appearance: button;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Remove the inner border and padding in Firefox.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button::-moz-focus-inner,
 | 
				
			||||||
 | 
					[type="button"]::-moz-focus-inner,
 | 
				
			||||||
 | 
					[type="reset"]::-moz-focus-inner,
 | 
				
			||||||
 | 
					[type="submit"]::-moz-focus-inner {
 | 
				
			||||||
 | 
					  border-style: none;
 | 
				
			||||||
 | 
					  padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Restore the focus styles unset by the previous rule.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button:-moz-focusring,
 | 
				
			||||||
 | 
					[type="button"]:-moz-focusring,
 | 
				
			||||||
 | 
					[type="reset"]:-moz-focusring,
 | 
				
			||||||
 | 
					[type="submit"]:-moz-focusring {
 | 
				
			||||||
 | 
					  outline: 1px dotted ButtonText;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Correct the padding in Firefox.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fieldset {
 | 
				
			||||||
 | 
					  padding: 0.35em 0.75em 0.625em;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 1. Correct the text wrapping in Edge and IE.
 | 
				
			||||||
 | 
					 * 2. Correct the color inheritance from `fieldset` elements in IE.
 | 
				
			||||||
 | 
					 * 3. Remove the padding so developers are not caught out when they zero out
 | 
				
			||||||
 | 
					 *    `fieldset` elements in all browsers.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					legend {
 | 
				
			||||||
 | 
					  box-sizing: border-box; /* 1 */
 | 
				
			||||||
 | 
					  color: inherit; /* 2 */
 | 
				
			||||||
 | 
					  display: table; /* 1 */
 | 
				
			||||||
 | 
					  max-width: 100%; /* 1 */
 | 
				
			||||||
 | 
					  padding: 0; /* 3 */
 | 
				
			||||||
 | 
					  white-space: normal; /* 1 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Add the correct vertical alignment in Chrome, Firefox, and Opera.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					progress {
 | 
				
			||||||
 | 
					  vertical-align: baseline;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Remove the default vertical scrollbar in IE 10+.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					textarea {
 | 
				
			||||||
 | 
					  overflow: auto;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 1. Add the correct box sizing in IE 10.
 | 
				
			||||||
 | 
					 * 2. Remove the padding in IE 10.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[type="checkbox"],
 | 
				
			||||||
 | 
					[type="radio"] {
 | 
				
			||||||
 | 
					  box-sizing: border-box; /* 1 */
 | 
				
			||||||
 | 
					  padding: 0; /* 2 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Correct the cursor style of increment and decrement buttons in Chrome.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[type="number"]::-webkit-inner-spin-button,
 | 
				
			||||||
 | 
					[type="number"]::-webkit-outer-spin-button {
 | 
				
			||||||
 | 
					  height: auto;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 1. Correct the odd appearance in Chrome and Safari.
 | 
				
			||||||
 | 
					 * 2. Correct the outline style in Safari.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[type="search"] {
 | 
				
			||||||
 | 
					  -webkit-appearance: textfield; /* 1 */
 | 
				
			||||||
 | 
					  outline-offset: -2px; /* 2 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Remove the inner padding in Chrome and Safari on macOS.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[type="search"]::-webkit-search-decoration {
 | 
				
			||||||
 | 
					  -webkit-appearance: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 1. Correct the inability to style clickable types in iOS and Safari.
 | 
				
			||||||
 | 
					 * 2. Change font properties to `inherit` in Safari.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					::-webkit-file-upload-button {
 | 
				
			||||||
 | 
					  -webkit-appearance: button; /* 1 */
 | 
				
			||||||
 | 
					  font: inherit; /* 2 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Interactive
 | 
				
			||||||
 | 
					   ========================================================================== */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Add the correct display in Edge, IE 10+, and Firefox.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					details {
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Add the correct display in all browsers.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					summary {
 | 
				
			||||||
 | 
					  display: list-item;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Misc
 | 
				
			||||||
 | 
					   ========================================================================== */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Add the correct display in IE 10+.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					template {
 | 
				
			||||||
 | 
					  display: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Add the correct display in IE 10.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[hidden] {
 | 
				
			||||||
 | 
					  display: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										96
									
								
								src/resources/js/ripple.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								src/resources/js/ripple.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,96 @@
 | 
				
			|||||||
 | 
					import { getCustomColorFromModifiers, getCustomRadiusFromModifiers, willHaveAMouseUpEvent, toStyles } from './utils';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let rippleClass = 'ripple';
 | 
				
			||||||
 | 
					let removeTimeout = 1000;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Add a ripple effect to the element.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @param {MouseEvent} event
 | 
				
			||||||
 | 
					 * @param {HTMLElement} el
 | 
				
			||||||
 | 
					 * @param {Array} modifiers
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export const addRipple = (event, el, modifiers) => {
 | 
				
			||||||
 | 
					    if (! willHaveAMouseUpEvent(event)) {
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const ripple = document.createElement('span');
 | 
				
			||||||
 | 
					    rippleClass.split(' ').forEach(className => ripple.classList.add(className));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    el.appendChild(ripple);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const size = ripple.offsetWidth,
 | 
				
			||||||
 | 
					        position = ripple.getBoundingClientRect(),
 | 
				
			||||||
 | 
					        innerRipple = document.createElement('span');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const x = event.pageX - position.left - (size / 2),
 | 
				
			||||||
 | 
					        y = event.pageY - position.top - (size / 2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const style = {
 | 
				
			||||||
 | 
					        top: `${y}px`,
 | 
				
			||||||
 | 
					        left: `${x}px`,
 | 
				
			||||||
 | 
					        width: `${size}px`,
 | 
				
			||||||
 | 
					        height: `${size}px`,
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const color = getCustomColorFromModifiers(modifiers);
 | 
				
			||||||
 | 
					    if (color.indexOf('bg-') === 0) {
 | 
				
			||||||
 | 
					        // Prefix with '!' for !important (requires Tailwind).
 | 
				
			||||||
 | 
					        innerRipple.classList.add(`!${color}`);
 | 
				
			||||||
 | 
					    } else if (color.indexOf('#') === 0 || color.indexOf('rgb') === 0) {
 | 
				
			||||||
 | 
					        style['--ripple-color'] = color;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const radius = getCustomRadiusFromModifiers(modifiers);
 | 
				
			||||||
 | 
					    if (radius) {
 | 
				
			||||||
 | 
					        style['--ripple-radius'] = radius;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ripple.appendChild(innerRipple);
 | 
				
			||||||
 | 
					    innerRipple.setAttribute('style', toStyles(style));
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Remove the ripple from the element.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @param {HTMLElement} el
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export const removeRipple = el => {
 | 
				
			||||||
 | 
					    setTimeout(() => {
 | 
				
			||||||
 | 
					        // We are only removing the first instance to prevent ripples from subsequent clicks
 | 
				
			||||||
 | 
					        // being removed too quickly before the ripple effect can properly be seen.
 | 
				
			||||||
 | 
					        const ripple = el.querySelector(`.${rippleClass.replace(' ', '.')}`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ripple && ripple.remove();
 | 
				
			||||||
 | 
					    }, removeTimeout);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function Ripple(Alpine) {
 | 
				
			||||||
 | 
					    Alpine.directive('ripple', (el, { modifiers, expression }, { cleanup }) => {
 | 
				
			||||||
 | 
					        const clickHandler = event => addRipple(event, el, modifiers);
 | 
				
			||||||
 | 
					        const mouseUpHandler = () => removeRipple(el);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        el.addEventListener('mousedown', clickHandler);
 | 
				
			||||||
 | 
					        el.addEventListener('mouseup', mouseUpHandler);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        cleanup(() => {
 | 
				
			||||||
 | 
					            el.removeEventListener('mousedown', clickHandler);
 | 
				
			||||||
 | 
					            el.removeEventListener('mouseup', mouseUpHandler);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Ripple.configure = config => {
 | 
				
			||||||
 | 
					    if (config.hasOwnProperty('class') && typeof config.class === 'string') {
 | 
				
			||||||
 | 
					        rippleClass = config.class;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (config.hasOwnProperty('removeTimeout') && typeof config.removeTimeout === 'number') {
 | 
				
			||||||
 | 
					        removeTimeout = config.removeTimeout;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return Ripple;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default Ripple;
 | 
				
			||||||
							
								
								
									
										67
									
								
								src/resources/js/utils.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								src/resources/js/utils.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
				
			|||||||
 | 
					export const getCustomColorFromModifiers = modifiers => {
 | 
				
			||||||
 | 
					    if (! modifiers.includes('color')) {
 | 
				
			||||||
 | 
					        return '';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const nextModifier = modifiers[modifiers.indexOf('color') + 1] || 'invalid-color';
 | 
				
			||||||
 | 
					    if (nextModifier.indexOf('#') === 0 || nextModifier.indexOf('rgb') === 0) {
 | 
				
			||||||
 | 
					        return nextModifier;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return nextModifier.indexOf('bg') === 0
 | 
				
			||||||
 | 
					        ? nextModifier
 | 
				
			||||||
 | 
					        : `bg-${nextModifier}`;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const getCustomRadiusFromModifiers = modifiers => {
 | 
				
			||||||
 | 
					    if (! modifiers.includes('radius')) {
 | 
				
			||||||
 | 
					        return '';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let nextModifier = modifiers[modifiers.indexOf('radius') + 1] || 'invalid-radius';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // _ allows us to use decimals, such as 0.5.
 | 
				
			||||||
 | 
					    nextModifier = nextModifier.replace('_', '.');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Separate the numeric value from the unit in nextModifier.
 | 
				
			||||||
 | 
					    // Possible values for nextModifier: 50, 50.5, 50.5px, 50px, 50%, 50rem, 50em
 | 
				
			||||||
 | 
					    const numericValue = nextModifier.match(/^[0-9]+(\.[0-9]+)?/)[0];
 | 
				
			||||||
 | 
					    let unit = nextModifier.replace(numericValue, '');
 | 
				
			||||||
 | 
					    if (! unit) {
 | 
				
			||||||
 | 
					        unit = '%';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return `${numericValue}${unit}`;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Convert an object of style properties to a string of CSS.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @param {Object} styles
 | 
				
			||||||
 | 
					 * @returns {string}
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export const toStyles = styles => Object.entries(styles).map(([key, value]) => `${formatStyleKey(key)}: ${value}`).join(';');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Convert a style key to a CSS property.
 | 
				
			||||||
 | 
					 * Example: backgroundColor -> background-color
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @param {string} key
 | 
				
			||||||
 | 
					 * @returns {string}
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					const formatStyleKey = key => key.replace(/([A-Z])/g, '-$1').toLowerCase();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Some events, such as a right click or ctrl + left click won't trigger a mouseup event,
 | 
				
			||||||
 | 
					 * so we need to prevent the ripple from being added in those cases.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @param {MouseEvent} event
 | 
				
			||||||
 | 
					 * @returns {boolean}
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export const willHaveAMouseUpEvent = event => {
 | 
				
			||||||
 | 
					    if (event.ctrlKey) {
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return event.button === 0 || event.button === 1;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
		Reference in New Issue
	
	Block a user