├── .gitignore
├── README.md
├── bundle.js
├── images
├── Icons
│ └── Nav
│ │ └── Apps.svg
├── avatar.svg
├── book-01.jpg
├── book-02.jpg
├── book-03.jpg
├── book-04.jpg
├── book-05.jpg
├── book-06.jpg
├── book-07.jpg
├── category-default.svg
├── category-selected.svg
├── home-default.svg
├── home-selected.svg
├── logo.svg
├── pick-1.jpg
├── pick-2.jpg
├── pick-3.jpg
├── pick-4.jpg
├── profile-default.svg
├── profile-selected.svg
├── read-01.jpg
├── read-02.jpg
├── read-03.jpg
├── read-04.jpg
├── wishlist-default.svg
└── wishlist-selected.svg
├── index.html
├── main.js
├── output.css
├── package-lock.json
├── package.json
├── screenshot.png
├── style.css
└── tailwind.js
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Libre - a responsive single page app template for collection management projects.
2 |
3 | 
4 |
5 | Libre is a responsive single page app template designed for developers who want to create collection management-like projects (e.g. books, music, podcasts, games, etc.). Built with tailwind.css and vanilla javascript, this template is easily customizable and has common components like profile, lists, filters and popovers which sets the ground work for your projects. Libre is made for Codrops exclusively.
6 |
7 | ## Running the project locally
8 | Make sure your local version is v6+. I currently am using v10.8 as of Aug 2018.
9 | ```
10 | npm install
11 | ```
12 |
13 | If you want to regenerate css with your changes, run this command to generate css using tailwind config (e.g. tailwind.js)
14 | ```
15 | $ ./node_modules/.bin/tailwind build style.css -c ./tailwind.js -o ./output.css
16 | ```
17 |
18 | If you want to recompile the javascript, make sure browserify is installed globally then run this command to create bundle.js
19 | ```
20 | $ npm install -g browserify
21 | $ browserify main.js -o bundle.js
22 | ```
23 |
24 | Check out the details on [Codrops](https://tympanus.net/codrops/2018/09/16/freebie-libre-web-app-template/)
25 |
26 | ## Live Demo
27 | 👋 [Libre Live Demo](https://tympanus.net/Freebies/libre/)
28 |
29 | ## Credits
30 | - [Browserify](http://browserify.org/)
31 | - [Anime.js](http://animejs.com/)
32 | - [tippy.js](https://atomiks.github.io/tippyjs/)
33 | - [Tailwind.css](https://tailwindcss.com/)
34 | - [Shopify Polaris's Icons](https://polaris.shopify.com/)
35 |
36 | ## License
37 | Use it freely but please do not republish, distribute or sell "as-is". [Read more about our license.](http://tympanus.net/codrops/licensing/)
38 |
39 | ## Misc
40 |
41 | Follow Amie: [Website](https://www.amie-chen.com/), [Dribbble](http://www.dribbble.com/hyperyolo), [Github](https://github.com/amiechen), [Twitter](https://twitter.com/hyper_yolo), [Medium](https://medium.com/@hyperyolo)
42 |
43 | Follow Codrops: [Twitter](http://www.twitter.com/codrops), [Facebook](http://www.facebook.com/pages/Codrops/159107397912), [Google+](https://plus.google.com/101095823814290637419), [GitHub](https://github.com/codrops), [Pinterest](http://www.pinterest.com/codrops/)
44 |
45 | [© Codrops 2018](http://www.codrops.com)
--------------------------------------------------------------------------------
/images/Icons/Nav/Apps.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/images/avatar.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/images/book-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amiechen/codrops-libre/97f3ed9f63af3636485103d5e4b514e49fe52659/images/book-01.jpg
--------------------------------------------------------------------------------
/images/book-02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amiechen/codrops-libre/97f3ed9f63af3636485103d5e4b514e49fe52659/images/book-02.jpg
--------------------------------------------------------------------------------
/images/book-03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amiechen/codrops-libre/97f3ed9f63af3636485103d5e4b514e49fe52659/images/book-03.jpg
--------------------------------------------------------------------------------
/images/book-04.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amiechen/codrops-libre/97f3ed9f63af3636485103d5e4b514e49fe52659/images/book-04.jpg
--------------------------------------------------------------------------------
/images/book-05.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amiechen/codrops-libre/97f3ed9f63af3636485103d5e4b514e49fe52659/images/book-05.jpg
--------------------------------------------------------------------------------
/images/book-06.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amiechen/codrops-libre/97f3ed9f63af3636485103d5e4b514e49fe52659/images/book-06.jpg
--------------------------------------------------------------------------------
/images/book-07.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amiechen/codrops-libre/97f3ed9f63af3636485103d5e4b514e49fe52659/images/book-07.jpg
--------------------------------------------------------------------------------
/images/category-default.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/images/category-selected.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/images/home-default.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/images/home-selected.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/images/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/images/pick-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amiechen/codrops-libre/97f3ed9f63af3636485103d5e4b514e49fe52659/images/pick-1.jpg
--------------------------------------------------------------------------------
/images/pick-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amiechen/codrops-libre/97f3ed9f63af3636485103d5e4b514e49fe52659/images/pick-2.jpg
--------------------------------------------------------------------------------
/images/pick-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amiechen/codrops-libre/97f3ed9f63af3636485103d5e4b514e49fe52659/images/pick-3.jpg
--------------------------------------------------------------------------------
/images/pick-4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amiechen/codrops-libre/97f3ed9f63af3636485103d5e4b514e49fe52659/images/pick-4.jpg
--------------------------------------------------------------------------------
/images/profile-default.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/images/profile-selected.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/images/read-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amiechen/codrops-libre/97f3ed9f63af3636485103d5e4b514e49fe52659/images/read-01.jpg
--------------------------------------------------------------------------------
/images/read-02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amiechen/codrops-libre/97f3ed9f63af3636485103d5e4b514e49fe52659/images/read-02.jpg
--------------------------------------------------------------------------------
/images/read-03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amiechen/codrops-libre/97f3ed9f63af3636485103d5e4b514e49fe52659/images/read-03.jpg
--------------------------------------------------------------------------------
/images/read-04.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amiechen/codrops-libre/97f3ed9f63af3636485103d5e4b514e49fe52659/images/read-04.jpg
--------------------------------------------------------------------------------
/images/wishlist-default.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/images/wishlist-selected.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Personal Library - Codrops Template
12 |
13 |
14 |
15 |
16 |
17 |
18 |
21 |
22 |
37 |
38 |
59 |
60 |
61 |
62 |
102 |
103 |
104 |
105 |
106 |
107 |
Art & Design
108 |
Interesting Stats
109 |
110 |
111 |
112 |
113 |
114 |
115 |
Your favourite authors in this category
116 |
117 |
118 |
119 | Name |
120 | Owned/Wishlist |
121 | Nationality |
122 |
123 |
124 |
125 |
126 | Yohji Yamamoto |
127 | 5/4 |
128 | Japan |
129 |
130 |
131 | Sato Oki |
132 | 1/3 |
133 | Japan |
134 |
135 |
136 | Amaya Arzuaga |
137 | 1/1 |
138 | Spain |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
Most read format
147 |
Print
148 |
149 |
150 |
Total read/own
151 |
4/7
152 |
153 |
154 |
155 |
Most re-read book
156 |
Just My Type: A Book About Fonts
157 |
by Simon Garfield
158 |
159 |
160 |
161 |
162 |
163 |
Books
164 |
165 |
Stats
166 |
Library (7)
167 |
Picks for you
168 |
169 |
170 |
171 |
172 |
173 |

174 |
175 |
apartmento Aug 2018
176 |
Eu quo donec pellentesque, urna velit. Ultrices ante iaculis ligula praesent.
177 |
178 |
179 |
184 |
189 |
190 |
191 |
192 |
193 |

194 |
195 |
Popeye Aug 2018
196 |
Eu quo donec pellentesque, urna velit. Ultrices ante iaculis ligula praesent.
197 |
198 |
199 |
205 |
210 |
211 |
212 |
213 |
214 |

215 |
216 |
Brutus Aug 2018
217 |
Eu quo donec pellentesque, urna velit. Ultrices ante iaculis ligula praesent.
218 |
219 |
220 |
225 |
230 |
231 |
232 |
233 |
234 |

235 |
236 |
Harnako Aug 2018
237 |
Eu quo donec pellentesque, urna velit. Ultrices ante iaculis ligula praesent.
238 |
239 |
240 |
245 |
250 |
251 |
252 |
253 |
254 |

255 |
256 |
Premium 2 2018
257 |
Eu quo donec pellentesque, urna velit. Ultrices ante iaculis ligula praesent.
258 |
259 |
260 |
265 |
270 |
271 |
272 |
273 |
274 |

275 |
276 |
Premium 4 2018
277 |
Eu quo donec pellentesque, urna velit. Ultrices ante iaculis ligula praesent.
278 |
279 |
280 |
285 |
290 |
291 |
292 |
293 |
294 |

295 |
296 |
Brutus Aug 2018
297 |
Eu quo donec pellentesque, urna velit. Ultrices ante iaculis ligula praesent.
298 |
299 |
300 |
305 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |

318 |
319 |
Popeye Jul 2018
320 |
Eu quo donec pellentesque, urna velit. Ultrices ante iaculis ligula praesent
321 |
322 |
323 |
324 |
325 |

326 |
327 |
Brutus Aug 2018
328 |
Sapien eget, fermentum curabitur quis ut pharetra odio id, vitae eros eget maecenas, ullamcorper vitae.
329 |
330 |
331 |
332 |
333 |

334 |
335 |
Casa Aug 2018
336 |
Curabitur quis ut pharetra odio id, vitae eros eget tristique maecenas, ullamcorper vitae.
337 |
338 |
339 |
340 |
341 |

342 |
343 |
SUPER: Jul 2018
344 |
Eu quo donec pellentesque, urna velit. Ultrices ante iaculis ligula praesent
345 |
346 |
347 |
348 |
349 |
350 |
351 |
352 |
353 |
368 |
369 |
Amie Chen
370 |
Joined since 2017
371 |
372 |
373 |
374 |
You have read 4 of 30 books in 2018
375 |
376 |

377 |

378 |

379 |

380 |
381 |
382 |
383 |
Currently Reading
384 |
385 |

386 |
387 |
Popular Lies* About Graphic Design
388 |
15/250 pages
389 |
390 |
391 |
392 |
393 |
394 |
410 |
411 |
412 |
--------------------------------------------------------------------------------
/main.js:
--------------------------------------------------------------------------------
1 | const anime = require("animejs");
2 | const tippy = require("tippy.js");
3 | const imagesloaded = require("imagesloaded");
4 |
5 | // utilities
6 | const get = (selector, scope) => {
7 | scope = scope ? scope : document;
8 | return scope.querySelector(selector);
9 | };
10 |
11 | const getAll = (selector, scope) => {
12 | scope = scope ? scope : document;
13 | return scope.querySelectorAll(selector);
14 | };
15 |
16 | const nav = get("nav");
17 | const profile = get("#profile");
18 | const loading = get("#loading");
19 | const content = get("#content");
20 | const toggle = get(".toggle");
21 | const avatarAnimation = anime({
22 | targets: '#avatar #moon',
23 | rotate: '1turn',
24 | transformOrigin: "center center 0",
25 | duration: 5000
26 | });
27 | const showSidenavCategories = anime({
28 | targets: '#sidenav-categories li',
29 | translateY: [-10, 0],
30 | duration: 1200,
31 | opacity: [0,1],
32 | delay: function(el, i) {
33 | return i * 60;
34 | }
35 | });
36 |
37 | function isHidden(el) {
38 | return (el.offsetParent === null)
39 | }
40 |
41 | function removeLoadingScreen () {
42 | anime({
43 | targets: "#loading",
44 | opacity: 0,
45 | duration: 1000,
46 | easing: "easeOutExpo",
47 | complete: () => {
48 | loading.style.display = "none";
49 | }
50 | });
51 | }
52 |
53 | // loading animation
54 | anime({
55 | targets: '#morphing #moon',
56 | rotate: '1turn',
57 | transformOrigin: "center center 0",
58 | duration: 5000,
59 | loop: true
60 | });
61 |
62 | // toggle stats on when window resizes
63 | window.addEventListener("resize", () => {
64 | if(window.innerWidth > 768) {
65 | if (get("[data-tab='section-stats']").classList.contains('active')) {
66 | get("[data-tab='section-library']").click();
67 | }
68 | if (content.classList.contains("hidden")) {
69 | content.classList.remove("hidden");
70 | content.classList.add("flex");
71 | profile.style.top = 0;
72 | }
73 | }
74 | })
75 |
76 | // show loading screen if images loaded faster than 200ms
77 | setTimeout(() => {
78 | imagesloaded(get("body"), () => {
79 | let tabs = getAll(".js-tab");
80 | let panes = getAll(".js-tab-pane");
81 | let sidenavCategoriesTrigger = get("#sidenav-categories-trigger");
82 | let sidenavCategories = get("#sidenav-categories");
83 | let sidenavIcon = get("#sidenav-icon");
84 | let books = getAll(".js-book");
85 | let mobileReoadTriggers = getAll(".mobile-home-trigger");
86 |
87 | removeLoadingScreen();
88 |
89 | // bind click event to sideNav
90 | sidenavCategoriesTrigger.addEventListener("click", sidenavClick);
91 |
92 | // bind click event to each tab
93 | for (var i = 0; i < tabs.length; i++) {
94 | tabs[i].addEventListener("click", tabClick);
95 | }
96 |
97 | for (let i = 0; i < mobileReoadTriggers.length; i++) {
98 | mobileReoadTriggers[i].addEventListener("click", event => {
99 | location.reload();
100 | })
101 | }
102 |
103 | for (var i = 0; i < books.length; i++) {
104 | tippy(books[i], {
105 | html: "#popup",
106 | placement: "right",
107 | theme: "light rounded",
108 | arrow: true,
109 | arrowTransform: "scaleX(1.3)",
110 | distance: 20,
111 | maxWidth: "200px",
112 | animation: "fade",
113 | trigger: "click",
114 | interactive: true,
115 | });
116 | }
117 |
118 | // disable/enable tippy if on mobile/desktop device
119 | tippy.browser.onUserInputChange = type => {
120 | const method = type === 'touch' || this.window.innerWidth < 768 ? 'disable' : 'enable';
121 | for (let i = 0; i < books.length; i++) {
122 | books[i]._tippy[method]();
123 | }
124 | }
125 |
126 | function sidenavClick (event) {
127 | if (sidenavCategories.classList.contains("hidden")) {
128 | sidenavCategories.classList.remove("hidden");
129 | sidenavIcon.classList.remove("rotate");
130 | showSidenavCategories.restart();
131 | } else {
132 | sidenavCategories.classList.add("hidden");
133 | sidenavIcon.classList.add("rotate");
134 | }
135 | }
136 |
137 | // each click event is scoped to the tab_container
138 | function tabClick (event) {
139 | let clickedTab = event.target;
140 | let activePane = get(`#${clickedTab.getAttribute("data-tab")}`);
141 |
142 | // remove all active tab classes
143 | for (let i = 0; i < tabs.length; i++) {
144 | tabs[i].classList.remove('active');
145 | }
146 |
147 | // remove all active pane classes
148 | for (var i = 0; i < panes.length; i++) {
149 | panes[i].classList.remove('active');
150 | }
151 |
152 | // apply active classes on desired tab and pane
153 | clickedTab.classList.add('active');
154 | activePane.classList.add('active');
155 | }
156 | });
157 | }, 1000);
158 |
159 | get("#mobile-nav-trigger").addEventListener("click", event => {
160 | if (isHidden(nav)) {
161 | toggle.classList.add("open");
162 | nav.classList.remove("hidden");
163 | } else {
164 | toggle.classList.remove("open");
165 | nav.classList.add("hidden");
166 | }
167 | });
168 |
169 | get("#mobile-profile-trigger").addEventListener("click", event => {
170 | profile.classList.remove("hidden");
171 | profile.style.top = "63px";
172 | content.classList.remove("flex");
173 | content.classList.add("hidden");
174 | nav.classList.add("hidden");
175 | toggle.classList.remove("open");
176 | });
177 |
178 | // avatar animation
179 | get("#avatar").addEventListener("mouseenter", event => {
180 | avatarAnimation.restart();
181 | }, false);
182 |
183 | get("#avatar").addEventListener("mouseleave", event => {
184 | avatarAnimation.reverse();
185 | }, false);
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "codrops-library",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "animejs": {
8 | "version": "2.2.0",
9 | "resolved": "https://registry.npmjs.org/animejs/-/animejs-2.2.0.tgz",
10 | "integrity": "sha1-Ne79/FNbgZScnLBvCz5gwC5v3IA="
11 | },
12 | "ansi-regex": {
13 | "version": "2.1.1",
14 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
15 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
16 | "dev": true
17 | },
18 | "ansi-styles": {
19 | "version": "2.2.1",
20 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
21 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
22 | "dev": true
23 | },
24 | "balanced-match": {
25 | "version": "1.0.0",
26 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
27 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
28 | "dev": true
29 | },
30 | "brace-expansion": {
31 | "version": "1.1.11",
32 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
33 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
34 | "dev": true,
35 | "requires": {
36 | "balanced-match": "^1.0.0",
37 | "concat-map": "0.0.1"
38 | }
39 | },
40 | "camelcase-css": {
41 | "version": "1.0.1",
42 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-1.0.1.tgz",
43 | "integrity": "sha1-FXxCOCZfXPlKHf/ehkRlUsvz9wU=",
44 | "dev": true
45 | },
46 | "chalk": {
47 | "version": "1.1.3",
48 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
49 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
50 | "dev": true,
51 | "requires": {
52 | "ansi-styles": "^2.2.1",
53 | "escape-string-regexp": "^1.0.2",
54 | "has-ansi": "^2.0.0",
55 | "strip-ansi": "^3.0.0",
56 | "supports-color": "^2.0.0"
57 | },
58 | "dependencies": {
59 | "supports-color": {
60 | "version": "2.0.0",
61 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
62 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
63 | "dev": true
64 | }
65 | }
66 | },
67 | "color-convert": {
68 | "version": "1.9.2",
69 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz",
70 | "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==",
71 | "dev": true,
72 | "requires": {
73 | "color-name": "1.1.1"
74 | }
75 | },
76 | "color-name": {
77 | "version": "1.1.1",
78 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz",
79 | "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=",
80 | "dev": true
81 | },
82 | "commander": {
83 | "version": "2.17.1",
84 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
85 | "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
86 | "dev": true
87 | },
88 | "comment-regex": {
89 | "version": "1.0.1",
90 | "resolved": "https://registry.npmjs.org/comment-regex/-/comment-regex-1.0.1.tgz",
91 | "integrity": "sha512-IWlN//Yfby92tOIje7J18HkNmWRR7JESA/BK8W7wqY/akITpU5B0JQWnbTjCfdChSrDNb0DrdA9jfAxiiBXyiQ==",
92 | "dev": true
93 | },
94 | "concat-map": {
95 | "version": "0.0.1",
96 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
97 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
98 | "dev": true
99 | },
100 | "css.escape": {
101 | "version": "1.5.1",
102 | "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
103 | "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=",
104 | "dev": true
105 | },
106 | "defined": {
107 | "version": "1.0.0",
108 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
109 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
110 | "dev": true
111 | },
112 | "dot-prop": {
113 | "version": "4.2.0",
114 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
115 | "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
116 | "dev": true,
117 | "requires": {
118 | "is-obj": "^1.0.0"
119 | }
120 | },
121 | "escape-string-regexp": {
122 | "version": "1.0.5",
123 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
124 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
125 | "dev": true
126 | },
127 | "ev-emitter": {
128 | "version": "1.1.1",
129 | "resolved": "https://registry.npmjs.org/ev-emitter/-/ev-emitter-1.1.1.tgz",
130 | "integrity": "sha512-ipiDYhdQSCZ4hSbX4rMW+XzNKMD1prg/sTvoVmSLkuQ1MVlwjJQQA+sW8tMYR3BLUr9KjodFV4pvzunvRhd33Q=="
131 | },
132 | "fs-extra": {
133 | "version": "4.0.3",
134 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
135 | "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
136 | "dev": true,
137 | "requires": {
138 | "graceful-fs": "^4.1.2",
139 | "jsonfile": "^4.0.0",
140 | "universalify": "^0.1.0"
141 | }
142 | },
143 | "fs.realpath": {
144 | "version": "1.0.0",
145 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
146 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
147 | "dev": true
148 | },
149 | "gather-stream": {
150 | "version": "1.0.0",
151 | "resolved": "https://registry.npmjs.org/gather-stream/-/gather-stream-1.0.0.tgz",
152 | "integrity": "sha1-szmUr0V6gRVwDUEPMXczy+egkEs=",
153 | "dev": true
154 | },
155 | "glob": {
156 | "version": "7.1.2",
157 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
158 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
159 | "dev": true,
160 | "requires": {
161 | "fs.realpath": "^1.0.0",
162 | "inflight": "^1.0.4",
163 | "inherits": "2",
164 | "minimatch": "^3.0.4",
165 | "once": "^1.3.0",
166 | "path-is-absolute": "^1.0.0"
167 | }
168 | },
169 | "graceful-fs": {
170 | "version": "4.1.11",
171 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
172 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
173 | "dev": true
174 | },
175 | "has-ansi": {
176 | "version": "2.0.0",
177 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
178 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
179 | "dev": true,
180 | "requires": {
181 | "ansi-regex": "^2.0.0"
182 | }
183 | },
184 | "has-flag": {
185 | "version": "1.0.0",
186 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
187 | "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
188 | "dev": true
189 | },
190 | "imagesloaded": {
191 | "version": "4.1.4",
192 | "resolved": "https://registry.npmjs.org/imagesloaded/-/imagesloaded-4.1.4.tgz",
193 | "integrity": "sha512-ltiBVcYpc/TYTF5nolkMNsnREHW+ICvfQ3Yla2Sgr71YFwQ86bDwV9hgpFhFtrGPuwEx5+LqOHIrdXBdoWwwsA==",
194 | "requires": {
195 | "ev-emitter": "^1.0.0"
196 | }
197 | },
198 | "indexes-of": {
199 | "version": "1.0.1",
200 | "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
201 | "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
202 | "dev": true
203 | },
204 | "inflight": {
205 | "version": "1.0.6",
206 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
207 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
208 | "dev": true,
209 | "requires": {
210 | "once": "^1.3.0",
211 | "wrappy": "1"
212 | }
213 | },
214 | "inherits": {
215 | "version": "2.0.3",
216 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
217 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
218 | "dev": true
219 | },
220 | "is-obj": {
221 | "version": "1.0.1",
222 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
223 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
224 | "dev": true
225 | },
226 | "js-base64": {
227 | "version": "2.4.8",
228 | "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.8.tgz",
229 | "integrity": "sha512-hm2nYpDrwoO/OzBhdcqs/XGT6XjSuSSCVEpia+Kl2J6x4CYt5hISlVL/AYU1khoDXv0AQVgxtdJySb9gjAn56Q==",
230 | "dev": true
231 | },
232 | "jsonfile": {
233 | "version": "4.0.0",
234 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
235 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
236 | "dev": true,
237 | "requires": {
238 | "graceful-fs": "^4.1.6"
239 | }
240 | },
241 | "lodash": {
242 | "version": "4.17.10",
243 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
244 | "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
245 | "dev": true
246 | },
247 | "minimatch": {
248 | "version": "3.0.4",
249 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
250 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
251 | "dev": true,
252 | "requires": {
253 | "brace-expansion": "^1.1.7"
254 | }
255 | },
256 | "minimist": {
257 | "version": "1.2.0",
258 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
259 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
260 | "dev": true
261 | },
262 | "object-assign": {
263 | "version": "4.1.1",
264 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
265 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
266 | "dev": true
267 | },
268 | "once": {
269 | "version": "1.4.0",
270 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
271 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
272 | "dev": true,
273 | "requires": {
274 | "wrappy": "1"
275 | }
276 | },
277 | "path-is-absolute": {
278 | "version": "1.0.1",
279 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
280 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
281 | "dev": true
282 | },
283 | "perfectionist": {
284 | "version": "2.4.0",
285 | "resolved": "https://registry.npmjs.org/perfectionist/-/perfectionist-2.4.0.tgz",
286 | "integrity": "sha1-wUetNxThJkZ/F2QSnuct+GHUfqA=",
287 | "dev": true,
288 | "requires": {
289 | "comment-regex": "^1.0.0",
290 | "defined": "^1.0.0",
291 | "minimist": "^1.2.0",
292 | "postcss": "^5.0.8",
293 | "postcss-scss": "^0.3.0",
294 | "postcss-value-parser": "^3.3.0",
295 | "read-file-stdin": "^0.2.0",
296 | "string.prototype.repeat": "^0.2.0",
297 | "vendors": "^1.0.0",
298 | "write-file-stdout": "0.0.2"
299 | },
300 | "dependencies": {
301 | "postcss": {
302 | "version": "5.2.18",
303 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
304 | "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
305 | "dev": true,
306 | "requires": {
307 | "chalk": "^1.1.3",
308 | "js-base64": "^2.1.9",
309 | "source-map": "^0.5.6",
310 | "supports-color": "^3.2.3"
311 | }
312 | }
313 | }
314 | },
315 | "popper.js": {
316 | "version": "1.14.4",
317 | "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.4.tgz",
318 | "integrity": "sha1-juwdj/AqWjoVLdQ0FKFce3n9abY="
319 | },
320 | "postcss": {
321 | "version": "6.0.23",
322 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
323 | "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
324 | "dev": true,
325 | "requires": {
326 | "chalk": "^2.4.1",
327 | "source-map": "^0.6.1",
328 | "supports-color": "^5.4.0"
329 | },
330 | "dependencies": {
331 | "ansi-styles": {
332 | "version": "3.2.1",
333 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
334 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
335 | "dev": true,
336 | "requires": {
337 | "color-convert": "^1.9.0"
338 | }
339 | },
340 | "chalk": {
341 | "version": "2.4.1",
342 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
343 | "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
344 | "dev": true,
345 | "requires": {
346 | "ansi-styles": "^3.2.1",
347 | "escape-string-regexp": "^1.0.5",
348 | "supports-color": "^5.3.0"
349 | }
350 | },
351 | "has-flag": {
352 | "version": "3.0.0",
353 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
354 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
355 | "dev": true
356 | },
357 | "source-map": {
358 | "version": "0.6.1",
359 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
360 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
361 | "dev": true
362 | },
363 | "supports-color": {
364 | "version": "5.4.0",
365 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
366 | "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
367 | "dev": true,
368 | "requires": {
369 | "has-flag": "^3.0.0"
370 | }
371 | }
372 | }
373 | },
374 | "postcss-functions": {
375 | "version": "3.0.0",
376 | "resolved": "https://registry.npmjs.org/postcss-functions/-/postcss-functions-3.0.0.tgz",
377 | "integrity": "sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4=",
378 | "dev": true,
379 | "requires": {
380 | "glob": "^7.1.2",
381 | "object-assign": "^4.1.1",
382 | "postcss": "^6.0.9",
383 | "postcss-value-parser": "^3.3.0"
384 | }
385 | },
386 | "postcss-js": {
387 | "version": "1.0.1",
388 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-1.0.1.tgz",
389 | "integrity": "sha512-smhUUMF5o5W1ZCQSyh5A3lNOXFLdNrxqyhWbLsGolZH2AgVmlyhxhYbIixfsdKE6r1vG5i7O40DPcvEvE1mvjw==",
390 | "dev": true,
391 | "requires": {
392 | "camelcase-css": "^1.0.1",
393 | "postcss": "^6.0.11"
394 | }
395 | },
396 | "postcss-nested": {
397 | "version": "3.0.0",
398 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-3.0.0.tgz",
399 | "integrity": "sha512-1xxmLHSfubuUi6xZZ0zLsNoiKfk3BWQj6fkNMaBJC529wKKLcdeCxXt6KJmDLva+trNyQNwEaE/ZWMA7cve1fA==",
400 | "dev": true,
401 | "requires": {
402 | "postcss": "^6.0.14",
403 | "postcss-selector-parser": "^3.1.1"
404 | }
405 | },
406 | "postcss-scss": {
407 | "version": "0.3.1",
408 | "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-0.3.1.tgz",
409 | "integrity": "sha1-ZcYQ2OKn7g5isYNbcbiHBzSBbks=",
410 | "dev": true,
411 | "requires": {
412 | "postcss": "^5.2.4"
413 | },
414 | "dependencies": {
415 | "postcss": {
416 | "version": "5.2.18",
417 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
418 | "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
419 | "dev": true,
420 | "requires": {
421 | "chalk": "^1.1.3",
422 | "js-base64": "^2.1.9",
423 | "source-map": "^0.5.6",
424 | "supports-color": "^3.2.3"
425 | }
426 | }
427 | }
428 | },
429 | "postcss-selector-parser": {
430 | "version": "3.1.1",
431 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
432 | "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
433 | "dev": true,
434 | "requires": {
435 | "dot-prop": "^4.1.1",
436 | "indexes-of": "^1.0.1",
437 | "uniq": "^1.0.1"
438 | }
439 | },
440 | "postcss-value-parser": {
441 | "version": "3.3.0",
442 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz",
443 | "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=",
444 | "dev": true
445 | },
446 | "read-file-stdin": {
447 | "version": "0.2.1",
448 | "resolved": "https://registry.npmjs.org/read-file-stdin/-/read-file-stdin-0.2.1.tgz",
449 | "integrity": "sha1-JezP86FTtoCa+ssj7hU4fbng7mE=",
450 | "dev": true,
451 | "requires": {
452 | "gather-stream": "^1.0.0"
453 | }
454 | },
455 | "source-map": {
456 | "version": "0.5.7",
457 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
458 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
459 | "dev": true
460 | },
461 | "string.prototype.repeat": {
462 | "version": "0.2.0",
463 | "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-0.2.0.tgz",
464 | "integrity": "sha1-q6Nt4I3O5qWjN9SbLqHaGyj8Ds8=",
465 | "dev": true
466 | },
467 | "strip-ansi": {
468 | "version": "3.0.1",
469 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
470 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
471 | "dev": true,
472 | "requires": {
473 | "ansi-regex": "^2.0.0"
474 | }
475 | },
476 | "supports-color": {
477 | "version": "3.2.3",
478 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
479 | "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
480 | "dev": true,
481 | "requires": {
482 | "has-flag": "^1.0.0"
483 | }
484 | },
485 | "tailwindcss": {
486 | "version": "0.6.4",
487 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-0.6.4.tgz",
488 | "integrity": "sha512-xfN6NrJDCv9giNQOy8gwtXZ+7VJuCoqM6HV3ZtXO9bcjXiCd7N8inJLe+PvVxaA3cq4kwWH5RODuLN0pruXuIA==",
489 | "dev": true,
490 | "requires": {
491 | "commander": "^2.11.0",
492 | "css.escape": "^1.5.1",
493 | "fs-extra": "^4.0.2",
494 | "lodash": "^4.17.5",
495 | "perfectionist": "^2.4.0",
496 | "postcss": "^6.0.9",
497 | "postcss-functions": "^3.0.0",
498 | "postcss-js": "^1.0.1",
499 | "postcss-nested": "^3.0.0",
500 | "postcss-selector-parser": "^3.1.1"
501 | }
502 | },
503 | "tippy.js": {
504 | "version": "2.5.4",
505 | "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-2.5.4.tgz",
506 | "integrity": "sha512-1fpdl/tZ4pFjna4knkK/U2MQWHW2xYYU1ttZWZl0yapxvBUzGLfiI72CqenRog4R6KvvS7Y1WsSQhVv4bSce4g==",
507 | "requires": {
508 | "popper.js": "^1.14.3"
509 | }
510 | },
511 | "uniq": {
512 | "version": "1.0.1",
513 | "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
514 | "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
515 | "dev": true
516 | },
517 | "universalify": {
518 | "version": "0.1.2",
519 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
520 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
521 | "dev": true
522 | },
523 | "vendors": {
524 | "version": "1.0.2",
525 | "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz",
526 | "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==",
527 | "dev": true
528 | },
529 | "wrappy": {
530 | "version": "1.0.2",
531 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
532 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
533 | "dev": true
534 | },
535 | "write-file-stdout": {
536 | "version": "0.0.2",
537 | "resolved": "https://registry.npmjs.org/write-file-stdout/-/write-file-stdout-0.0.2.tgz",
538 | "integrity": "sha1-wlLXx8WxtAKJdjDjRTx7/mkNnKE=",
539 | "dev": true
540 | }
541 | }
542 | }
543 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "codrops-library",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "main.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "repository": {
10 | "type": "git",
11 | "url": "git+ssh://git@gitlab.com/amiechen/codrops-library.git"
12 | },
13 | "author": "Amie Chen",
14 | "license": "MIT",
15 | "bugs": {
16 | "url": "https://gitlab.com/amiechen/codrops-library/issues"
17 | },
18 | "homepage": "https://gitlab.com/amiechen/codrops-library#README",
19 | "devDependencies": {
20 | "tailwindcss": "^0.6.4"
21 | },
22 | "dependencies": {
23 | "animejs": "^2.2.0",
24 | "imagesloaded": "^4.1.4",
25 | "tippy.js": "^2.5.4"
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amiechen/codrops-libre/97f3ed9f63af3636485103d5e4b514e49fe52659/screenshot.png
--------------------------------------------------------------------------------
/style.css:
--------------------------------------------------------------------------------
1 | @tailwind preflight;
2 | @tailwind components;
3 |
4 | .transition-normal {
5 | transition: all 200ms ease;
6 | }
7 |
8 | .appearance-none {
9 | -webkit-appearance: none;
10 | appearance: none;
11 | }
12 |
13 | .js-tab:before {
14 | transition: 0.5s all ease;
15 | position: absolute;
16 | left: 50%;
17 | right: 50%;
18 | bottom: -2px;
19 | opacity: 0;
20 | content: "";
21 | height: 2px;
22 | background-color: #6574CD;
23 | }
24 |
25 | .js-tab:hover:before {
26 | transition: 0.5s all ease;
27 | left: 0;
28 | right: 0;
29 | opacity: 1;
30 | }
31 |
32 | .js-tab-pane {
33 | display: none;
34 | }
35 |
36 | .js-tab.active:before {
37 | opacity: 1;
38 | left: 0;
39 | right: 0;
40 | }
41 |
42 | .js-tab-pane.active {
43 | display: flex;
44 | }
45 |
46 | #sidenav-icon.rotate {
47 | transform-origin: center center;
48 | transform: rotate(180deg);
49 | transition: transform .3s ease-in-out;
50 | }
51 |
52 | .hover\:brighter:hover {
53 | filter: brightness(110%);
54 | }
55 |
56 | .hover\:translate-y-1:hover {
57 | transform: translateY(-1px);
58 | }
59 |
60 | .active\:translate-y-1:active {
61 | transform: translateY(1px);
62 | }
63 |
64 | .tippy-tooltip {
65 | @apply p-4 text-left;
66 | }
67 |
68 | @responsive {
69 | .-order-1 {
70 | order: -1;
71 | }
72 | .order-0 {
73 | order: 0;
74 | }
75 |
76 | .order-1 {
77 | order: 1;
78 | }
79 |
80 | .order-2 {
81 | order: 2;
82 | }
83 | }
84 |
85 | .toggle {
86 | @apply relative;
87 | }
88 |
89 | .toggle span,
90 | .toggle span:before,
91 | .toggle span:after {
92 | content: '';
93 | position: absolute;
94 | height: 2px;
95 | width: 18px;
96 | border-radius: 2px;
97 | background: white;
98 | display: block;
99 | cursor: pointer;
100 | transition: all 0.3s ease-in-out;
101 | right: 0;
102 | }
103 |
104 | .toggle span:before {
105 | top: -6px;
106 | }
107 |
108 | .toggle span:after {
109 | bottom: -6px;
110 | }
111 |
112 | .toggle.open span{
113 | background-color: transparent;
114 | }
115 |
116 | .toggle.open span:before,
117 | .toggle.open span:after {
118 | top: 0;
119 | }
120 |
121 | .toggle.open span:before {
122 | transform: rotate(45deg);
123 | }
124 |
125 | .toggle.open span:after {
126 | transform: rotate(-45deg);
127 | }
128 |
129 | @tailwind utilities;
130 |
--------------------------------------------------------------------------------
/tailwind.js:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Tailwind - The Utility-First CSS Framework
4 |
5 | A project by Adam Wathan (@adamwathan), Jonathan Reinink (@reinink),
6 | David Hemphill (@davidhemphill) and Steve Schoger (@steveschoger).
7 |
8 | Welcome to the Tailwind config file. This is where you can customize
9 | Tailwind specifically for your project. Don't be intimidated by the
10 | length of this file. It's really just a big JavaScript object and
11 | we've done our very best to explain each section.
12 |
13 | View the full documentation at https://tailwindcss.com.
14 |
15 |
16 | |-------------------------------------------------------------------------------
17 | | The default config
18 | |-------------------------------------------------------------------------------
19 | |
20 | | This variable contains the default Tailwind config. You don't have
21 | | to use it, but it can sometimes be helpful to have available. For
22 | | example, you may choose to merge your custom configuration
23 | | values with some of the Tailwind defaults.
24 | |
25 | */
26 |
27 | // let defaultConfig = require('tailwindcss/defaultConfig')()
28 |
29 |
30 | /*
31 | |-------------------------------------------------------------------------------
32 | | Colors https://tailwindcss.com/docs/colors
33 | |-------------------------------------------------------------------------------
34 | |
35 | | Here you can specify the colors used in your project. To get you started,
36 | | we've provided a generous palette of great looking colors that are perfect
37 | | for prototyping, but don't hesitate to change them for your project. You
38 | | own these colors, nothing will break if you change everything about them.
39 | |
40 | | We've used literal color names ("red", "blue", etc.) for the default
41 | | palette, but if you'd rather use functional names like "primary" and
42 | | "secondary", or even a numeric scale like "100" and "200", go for it.
43 | |
44 | */
45 |
46 | let colors = {
47 | 'transparent': 'transparent',
48 |
49 | 'black': '#22292f',
50 | 'grey-darkest': '#3d4852',
51 | 'grey-darker': '#606f7b',
52 | 'grey-dark': '#8795a1',
53 | 'grey': '#b8c2cc',
54 | 'grey-light': '#dae1e7',
55 | 'grey-lighter': '#f1f5f8',
56 | 'grey-lighter-2': '#EAF1F7',
57 | 'grey-lightest': '#f8fafc',
58 | 'white': '#ffffff',
59 |
60 | 'libre-grey': '#C4CDD5',
61 | 'libre-yellow': '#FFC48B',
62 | 'libre-pink': '#FDAC9A',
63 |
64 | 'indigo-darkest': '#191e38',
65 | 'indigo-darker': '#2f365f',
66 | 'indigo-dark': '#5661b3',
67 | 'indigo-medium': '#38406C',
68 | 'indigo': '#6574cd',
69 | 'indigo-light': '#7886d7',
70 | 'indigo-lighter': '#b2b7ff',
71 | 'indigo-lightest': '#e6e8ff',
72 | }
73 |
74 | module.exports = {
75 |
76 | /*
77 | |-----------------------------------------------------------------------------
78 | | Colors https://tailwindcss.com/docs/colors
79 | |-----------------------------------------------------------------------------
80 | |
81 | | The color palette defined above is also assigned to the "colors" key of
82 | | your Tailwind config. This makes it easy to access them in your CSS
83 | | using Tailwind's config helper. For example:
84 | |
85 | | .error { color: config('colors.red') }
86 | |
87 | */
88 |
89 | colors: colors,
90 |
91 |
92 | /*
93 | |-----------------------------------------------------------------------------
94 | | Screens https://tailwindcss.com/docs/responsive-design
95 | |-----------------------------------------------------------------------------
96 | |
97 | | Screens in Tailwind are translated to CSS media queries. They define the
98 | | responsive breakpoints for your project. By default Tailwind takes a
99 | | "mobile first" approach, where each screen size represents a minimum
100 | | viewport width. Feel free to have as few or as many screens as you
101 | | want, naming them in whatever way you'd prefer for your project.
102 | |
103 | | Tailwind also allows for more complex screen definitions, which can be
104 | | useful in certain situations. Be sure to see the full responsive
105 | | documentation for a complete list of options.
106 | |
107 | | Class name: .{screen}:{utility}
108 | |
109 | */
110 |
111 | screens: {
112 | 'sm': '576px',
113 | 'md': '768px',
114 | 'lg': '992px',
115 | 'xl': '1200px',
116 | },
117 |
118 |
119 | /*
120 | |-----------------------------------------------------------------------------
121 | | Fonts https://tailwindcss.com/docs/fonts
122 | |-----------------------------------------------------------------------------
123 | |
124 | | Here is where you define your project's font stack, or font families.
125 | | Keep in mind that Tailwind doesn't actually load any fonts for you.
126 | | If you're using custom fonts you'll need to import them prior to
127 | | defining them here.
128 | |
129 | | By default we provide a native font stack that works remarkably well on
130 | | any device or OS you're using, since it just uses the default fonts
131 | | provided by the platform.
132 | |
133 | | Class name: .font-{name}
134 | |
135 | */
136 |
137 | fonts: {
138 | 'sans': [
139 | 'Roboto',
140 | 'sans-serif',
141 | ],
142 | 'serif': [
143 | 'Constantia',
144 | 'Lucida Bright',
145 | 'Lucidabright',
146 | 'Lucida Serif',
147 | 'Lucida',
148 | 'DejaVu Serif',
149 | 'Bitstream Vera Serif',
150 | 'Liberation Serif',
151 | 'Georgia',
152 | 'serif',
153 | ],
154 | 'mono': [
155 | 'Menlo',
156 | 'Monaco',
157 | 'Consolas',
158 | 'Liberation Mono',
159 | 'Courier New',
160 | 'monospace',
161 | ]
162 | },
163 |
164 |
165 | /*
166 | |-----------------------------------------------------------------------------
167 | | Text sizes https://tailwindcss.com/docs/text-sizing
168 | |-----------------------------------------------------------------------------
169 | |
170 | | Here is where you define your text sizes. Name these in whatever way
171 | | makes the most sense to you. We use size names by default, but
172 | | you're welcome to use a numeric scale or even something else
173 | | entirely.
174 | |
175 | | By default Tailwind uses the "rem" unit type for most measurements.
176 | | This allows you to set a root font size which all other sizes are
177 | | then based on. That said, you are free to use whatever units you
178 | | prefer, be it rems, ems, pixels or other.
179 | |
180 | | Class name: .text-{size}
181 | |
182 | */
183 |
184 | textSizes: {
185 | 'xs': '.75rem', // 12px
186 | 'sm': '.875rem', // 14px
187 | 'base': '1rem', // 16px
188 | 'lg': '1.125rem', // 18px
189 | 'xl': '1.25rem', // 20px
190 | '2xl': '1.5rem', // 24px
191 | '3xl': '1.875rem', // 30px
192 | '4xl': '2.25rem', // 36px
193 | '5xl': '3rem', // 48px
194 | },
195 |
196 |
197 | /*
198 | |-----------------------------------------------------------------------------
199 | | Font weights https://tailwindcss.com/docs/font-weight
200 | |-----------------------------------------------------------------------------
201 | |
202 | | Here is where you define your font weights. We've provided a list of
203 | | common font weight names with their respective numeric scale values
204 | | to get you started. It's unlikely that your project will require
205 | | all of these, so we recommend removing those you don't need.
206 | |
207 | | Class name: .font-{weight}
208 | |
209 | */
210 |
211 | fontWeights: {
212 | 'hairline': 100,
213 | 'thin': 200,
214 | 'light': 300,
215 | 'normal': 400,
216 | 'medium': 500,
217 | 'semibold': 600,
218 | 'bold': 700,
219 | 'extrabold': 800,
220 | 'black': 900,
221 | },
222 |
223 |
224 | /*
225 | |-----------------------------------------------------------------------------
226 | | Leading (line height) https://tailwindcss.com/docs/line-height
227 | |-----------------------------------------------------------------------------
228 | |
229 | | Here is where you define your line height values, or as we call
230 | | them in Tailwind, leadings.
231 | |
232 | | Class name: .leading-{size}
233 | |
234 | */
235 |
236 | leading: {
237 | 'none': 1,
238 | 'tight': 1.25,
239 | 'normal': 1.5,
240 | 'loose': 2,
241 | 'medium': 1.3,
242 | },
243 |
244 |
245 | /*
246 | |-----------------------------------------------------------------------------
247 | | Tracking (letter spacing) https://tailwindcss.com/docs/letter-spacing
248 | |-----------------------------------------------------------------------------
249 | |
250 | | Here is where you define your letter spacing values, or as we call
251 | | them in Tailwind, tracking.
252 | |
253 | | Class name: .tracking-{size}
254 | |
255 | */
256 |
257 | tracking: {
258 | 'tight': '-0.05em',
259 | 'normal': '0',
260 | 'wide': '0.05em',
261 | },
262 |
263 |
264 | /*
265 | |-----------------------------------------------------------------------------
266 | | Text colors https://tailwindcss.com/docs/text-color
267 | |-----------------------------------------------------------------------------
268 | |
269 | | Here is where you define your text colors. By default these use the
270 | | color palette we defined above, however you're welcome to set these
271 | | independently if that makes sense for your project.
272 | |
273 | | Class name: .text-{color}
274 | |
275 | */
276 |
277 | textColors: colors,
278 |
279 |
280 | /*
281 | |-----------------------------------------------------------------------------
282 | | Background colors https://tailwindcss.com/docs/background-color
283 | |-----------------------------------------------------------------------------
284 | |
285 | | Here is where you define your background colors. By default these use
286 | | the color palette we defined above, however you're welcome to set
287 | | these independently if that makes sense for your project.
288 | |
289 | | Class name: .bg-{color}
290 | |
291 | */
292 |
293 | backgroundColors: colors,
294 |
295 |
296 | /*
297 | |-----------------------------------------------------------------------------
298 | | Background sizes https://tailwindcss.com/docs/background-size
299 | |-----------------------------------------------------------------------------
300 | |
301 | | Here is where you define your background sizes. We provide some common
302 | | values that are useful in most projects, but feel free to add other sizes
303 | | that are specific to your project here as well.
304 | |
305 | | Class name: .bg-{size}
306 | |
307 | */
308 |
309 | backgroundSize: {
310 | 'auto': 'auto',
311 | 'cover': 'cover',
312 | 'contain': 'contain',
313 | },
314 |
315 |
316 | /*
317 | |-----------------------------------------------------------------------------
318 | | Border widths https://tailwindcss.com/docs/border-width
319 | |-----------------------------------------------------------------------------
320 | |
321 | | Here is where you define your border widths. Take note that border
322 | | widths require a special "default" value set as well. This is the
323 | | width that will be used when you do not specify a border width.
324 | |
325 | | Class name: .border{-side?}{-width?}
326 | |
327 | */
328 |
329 | borderWidths: {
330 | default: '1px',
331 | '0': '0',
332 | '2': '2px',
333 | '4': '4px',
334 | '8': '8px',
335 | },
336 |
337 |
338 | /*
339 | |-----------------------------------------------------------------------------
340 | | Border colors https://tailwindcss.com/docs/border-color
341 | |-----------------------------------------------------------------------------
342 | |
343 | | Here is where you define your border colors. By default these use the
344 | | color palette we defined above, however you're welcome to set these
345 | | independently if that makes sense for your project.
346 | |
347 | | Take note that border colors require a special "default" value set
348 | | as well. This is the color that will be used when you do not
349 | | specify a border color.
350 | |
351 | | Class name: .border-{color}
352 | |
353 | */
354 |
355 | borderColors: global.Object.assign({ default: colors['grey-light'] }, colors),
356 |
357 |
358 | /*
359 | |-----------------------------------------------------------------------------
360 | | Border radius https://tailwindcss.com/docs/border-radius
361 | |-----------------------------------------------------------------------------
362 | |
363 | | Here is where you define your border radius values. If a `default` radius
364 | | is provided, it will be made available as the non-suffixed `.rounded`
365 | | utility.
366 | |
367 | | If your scale includes a `0` value to reset already rounded corners, it's
368 | | a good idea to put it first so other values are able to override it.
369 | |
370 | | Class name: .rounded{-side?}{-size?}
371 | |
372 | */
373 |
374 | borderRadius: {
375 | 'none': '0',
376 | 'sm': '.125rem',
377 | default: '.25rem',
378 | 'lg': '.5rem',
379 | 'full': '9999px',
380 | },
381 |
382 |
383 | /*
384 | |-----------------------------------------------------------------------------
385 | | Width https://tailwindcss.com/docs/width
386 | |-----------------------------------------------------------------------------
387 | |
388 | | Here is where you define your width utility sizes. These can be
389 | | percentage based, pixels, rems, or any other units. By default
390 | | we provide a sensible rem based numeric scale, a percentage
391 | | based fraction scale, plus some other common use-cases. You
392 | | can, of course, modify these values as needed.
393 | |
394 | |
395 | | It's also worth mentioning that Tailwind automatically escapes
396 | | invalid CSS class name characters, which allows you to have
397 | | awesome classes like .w-2/3.
398 | |
399 | | Class name: .w-{size}
400 | |
401 | */
402 |
403 | width: {
404 | 'auto': 'auto',
405 | 'px': '1px',
406 | '1': '0.25rem',
407 | '2': '0.5rem',
408 | '3': '0.75rem',
409 | '4': '1rem',
410 | '5': '1.25rem',
411 | '6': '1.5rem',
412 | '8': '2rem',
413 | '10': '2.5rem',
414 | '12': '3rem',
415 | '16': '4rem',
416 | '24': '6rem',
417 | '32': '8rem',
418 | '48': '12rem',
419 | '64': '16rem',
420 | '1/2': '50%',
421 | '1/3': '33.33333%',
422 | '2/3': '66.66667%',
423 | '1/4': '25%',
424 | '3/4': '75%',
425 | '1/5': '20%',
426 | '2/5': '40%',
427 | '3/5': '60%',
428 | '4/5': '80%',
429 | '1/6': '16.66667%',
430 | '5/6': '83.33333%',
431 | 'full': '100%',
432 | 'screen': '100vw'
433 | },
434 |
435 |
436 | /*
437 | |-----------------------------------------------------------------------------
438 | | Height https://tailwindcss.com/docs/height
439 | |-----------------------------------------------------------------------------
440 | |
441 | | Here is where you define your height utility sizes. These can be
442 | | percentage based, pixels, rems, or any other units. By default
443 | | we provide a sensible rem based numeric scale plus some other
444 | | common use-cases. You can, of course, modify these values as
445 | | needed.
446 | |
447 | | Class name: .h-{size}
448 | |
449 | */
450 |
451 | height: {
452 | 'auto': 'auto',
453 | 'px': '1px',
454 | '1': '0.25rem',
455 | '2': '0.5rem',
456 | '3': '0.75rem',
457 | '4': '1rem',
458 | '5': '1.25rem',
459 | '6': '1.5rem',
460 | '8': '2rem',
461 | '10': '2.5rem',
462 | '12': '3rem',
463 | '16': '4rem',
464 | '24': '6rem',
465 | '32': '8rem',
466 | '48': '12rem',
467 | '64': '16rem',
468 | 'full': '100%',
469 | 'screen': '100vh'
470 | },
471 |
472 |
473 | /*
474 | |-----------------------------------------------------------------------------
475 | | Minimum width https://tailwindcss.com/docs/min-width
476 | |-----------------------------------------------------------------------------
477 | |
478 | | Here is where you define your minimum width utility sizes. These can
479 | | be percentage based, pixels, rems, or any other units. We provide a
480 | | couple common use-cases by default. You can, of course, modify
481 | | these values as needed.
482 | |
483 | | Class name: .min-w-{size}
484 | |
485 | */
486 |
487 | minWidth: {
488 | '0': '0',
489 | 'full': '100%',
490 | },
491 |
492 |
493 | /*
494 | |-----------------------------------------------------------------------------
495 | | Minimum height https://tailwindcss.com/docs/min-height
496 | |-----------------------------------------------------------------------------
497 | |
498 | | Here is where you define your minimum height utility sizes. These can
499 | | be percentage based, pixels, rems, or any other units. We provide a
500 | | few common use-cases by default. You can, of course, modify these
501 | | values as needed.
502 | |
503 | | Class name: .min-h-{size}
504 | |
505 | */
506 |
507 | minHeight: {
508 | '0': '0',
509 | 'full': '100%',
510 | 'screen': '100vh'
511 | },
512 |
513 |
514 | /*
515 | |-----------------------------------------------------------------------------
516 | | Maximum width https://tailwindcss.com/docs/max-width
517 | |-----------------------------------------------------------------------------
518 | |
519 | | Here is where you define your maximum width utility sizes. These can
520 | | be percentage based, pixels, rems, or any other units. By default
521 | | we provide a sensible rem based scale and a "full width" size,
522 | | which is basically a reset utility. You can, of course,
523 | | modify these values as needed.
524 | |
525 | | Class name: .max-w-{size}
526 | |
527 | */
528 |
529 | maxWidth: {
530 | 'xs': '20rem',
531 | 'sm': '30rem',
532 | 'md': '40rem',
533 | 'lg': '50rem',
534 | 'xl': '60rem',
535 | '2xl': '70rem',
536 | '3xl': '80rem',
537 | '4xl': '90rem',
538 | '5xl': '100rem',
539 | 'full': '100%',
540 | 'tiny': '7rem',
541 | },
542 |
543 |
544 | /*
545 | |-----------------------------------------------------------------------------
546 | | Maximum height https://tailwindcss.com/docs/max-height
547 | |-----------------------------------------------------------------------------
548 | |
549 | | Here is where you define your maximum height utility sizes. These can
550 | | be percentage based, pixels, rems, or any other units. We provide a
551 | | couple common use-cases by default. You can, of course, modify
552 | | these values as needed.
553 | |
554 | | Class name: .max-h-{size}
555 | |
556 | */
557 |
558 | maxHeight: {
559 | 'full': '100%',
560 | 'screen': '100vh',
561 | },
562 |
563 |
564 | /*
565 | |-----------------------------------------------------------------------------
566 | | Padding https://tailwindcss.com/docs/padding
567 | |-----------------------------------------------------------------------------
568 | |
569 | | Here is where you define your padding utility sizes. These can be
570 | | percentage based, pixels, rems, or any other units. By default we
571 | | provide a sensible rem based numeric scale plus a couple other
572 | | common use-cases like "1px". You can, of course, modify these
573 | | values as needed.
574 | |
575 | | Class name: .p{side?}-{size}
576 | |
577 | */
578 |
579 | padding: {
580 | 'px': '1px',
581 | '0': '0',
582 | '1': '0.25rem',
583 | '2': '0.5rem',
584 | '3': '0.75rem',
585 | '4': '1rem',
586 | '5': '1.25rem',
587 | '6': '1.5rem',
588 | '8': '2rem',
589 | '10': '2.5rem',
590 | '12': '3rem',
591 | '16': '4rem',
592 | '20': '5rem',
593 | '24': '6rem',
594 | '32': '8rem',
595 | '1/2': '.15rem',
596 | },
597 |
598 |
599 | /*
600 | |-----------------------------------------------------------------------------
601 | | Margin https://tailwindcss.com/docs/margin
602 | |-----------------------------------------------------------------------------
603 | |
604 | | Here is where you define your margin utility sizes. These can be
605 | | percentage based, pixels, rems, or any other units. By default we
606 | | provide a sensible rem based numeric scale plus a couple other
607 | | common use-cases like "1px". You can, of course, modify these
608 | | values as needed.
609 | |
610 | | Class name: .m{side?}-{size}
611 | |
612 | */
613 |
614 | margin: {
615 | 'auto': 'auto',
616 | 'px': '1px',
617 | '0': '0',
618 | '1': '0.25rem',
619 | '2': '0.5rem',
620 | '3': '0.75rem',
621 | '4': '1rem',
622 | '5': '1.25rem',
623 | '6': '1.5rem',
624 | '8': '2rem',
625 | '10': '2.5rem',
626 | '12': '3rem',
627 | '16': '4rem',
628 | '20': '5rem',
629 | '24': '6rem',
630 | '32': '8rem',
631 | },
632 |
633 |
634 | /*
635 | |-----------------------------------------------------------------------------
636 | | Negative margin https://tailwindcss.com/docs/negative-margin
637 | |-----------------------------------------------------------------------------
638 | |
639 | | Here is where you define your negative margin utility sizes. These can
640 | | be percentage based, pixels, rems, or any other units. By default we
641 | | provide matching values to the padding scale since these utilities
642 | | generally get used together. You can, of course, modify these
643 | | values as needed.
644 | |
645 | | Class name: .-m{side?}-{size}
646 | |
647 | */
648 |
649 | negativeMargin: {
650 | 'px': '1px',
651 | '0': '0',
652 | '1': '0.25rem',
653 | '2': '0.5rem',
654 | '3': '0.75rem',
655 | '4': '1rem',
656 | '5': '1.25rem',
657 | '6': '1.5rem',
658 | '8': '2rem',
659 | '10': '2.5rem',
660 | '12': '3rem',
661 | '16': '4rem',
662 | '20': '5rem',
663 | '24': '6rem',
664 | '32': '8rem',
665 | },
666 |
667 |
668 | /*
669 | |-----------------------------------------------------------------------------
670 | | Shadows https://tailwindcss.com/docs/shadows
671 | |-----------------------------------------------------------------------------
672 | |
673 | | Here is where you define your shadow utilities. As you can see from
674 | | the defaults we provide, it's possible to apply multiple shadows
675 | | per utility using comma separation.
676 | |
677 | | If a `default` shadow is provided, it will be made available as the non-
678 | | suffixed `.shadow` utility.
679 | |
680 | | Class name: .shadow-{size?}
681 | |
682 | */
683 |
684 | shadows: {
685 | default: '0 2px 4px 0 rgba(0,0,0,0.10)',
686 | 'md': '0 4px 8px 0 rgba(0,0,0,0.12), 0 2px 4px 0 rgba(0,0,0,0.08)',
687 | 'lg': '0 15px 30px 0 rgba(0,0,0,0.11), 0 5px 15px 0 rgba(0,0,0,0.08)',
688 | 'inner': 'inset 0 2px 4px 0 rgba(0,0,0,0.06)',
689 | 'outline': '0 0 0 3px rgba(52,144,220,0.5)',
690 | 'none': 'none',
691 | },
692 |
693 |
694 | /*
695 | |-----------------------------------------------------------------------------
696 | | Z-index https://tailwindcss.com/docs/z-index
697 | |-----------------------------------------------------------------------------
698 | |
699 | | Here is where you define your z-index utility values. By default we
700 | | provide a sensible numeric scale. You can, of course, modify these
701 | | values as needed.
702 | |
703 | | Class name: .z-{index}
704 | |
705 | */
706 |
707 | zIndex: {
708 | 'auto': 'auto',
709 | '0': 0,
710 | '10': 10,
711 | '20': 20,
712 | '30': 30,
713 | '40': 40,
714 | '50': 50,
715 | },
716 |
717 |
718 | /*
719 | |-----------------------------------------------------------------------------
720 | | Opacity https://tailwindcss.com/docs/opacity
721 | |-----------------------------------------------------------------------------
722 | |
723 | | Here is where you define your opacity utility values. By default we
724 | | provide a sensible numeric scale. You can, of course, modify these
725 | | values as needed.
726 | |
727 | | Class name: .opacity-{name}
728 | |
729 | */
730 |
731 | opacity: {
732 | '0': '0',
733 | '25': '.25',
734 | '50': '.5',
735 | '75': '.75',
736 | '100': '1',
737 | },
738 |
739 |
740 | /*
741 | |-----------------------------------------------------------------------------
742 | | SVG fill https://tailwindcss.com/docs/svg
743 | |-----------------------------------------------------------------------------
744 | |
745 | | Here is where you define your SVG fill colors. By default we just provide
746 | | `fill-current` which sets the fill to the current text color. This lets you
747 | | specify a fill color using existing text color utilities and helps keep the
748 | | generated CSS file size down.
749 | |
750 | | Class name: .fill-{name}
751 | |
752 | */
753 |
754 | svgFill: {
755 | 'current': 'currentColor',
756 | },
757 |
758 |
759 | /*
760 | |-----------------------------------------------------------------------------
761 | | SVG stroke https://tailwindcss.com/docs/svg
762 | |-----------------------------------------------------------------------------
763 | |
764 | | Here is where you define your SVG stroke colors. By default we just provide
765 | | `stroke-current` which sets the stroke to the current text color. This lets
766 | | you specify a stroke color using existing text color utilities and helps
767 | | keep the generated CSS file size down.
768 | |
769 | | Class name: .stroke-{name}
770 | |
771 | */
772 |
773 | svgStroke: {
774 | 'current': 'currentColor',
775 | },
776 |
777 |
778 | /*
779 | |-----------------------------------------------------------------------------
780 | | Modules https://tailwindcss.com/docs/configuration#modules
781 | |-----------------------------------------------------------------------------
782 | |
783 | | Here is where you control which modules are generated and what variants are
784 | | generated for each of those modules.
785 | |
786 | | Currently supported variants:
787 | | - responsive
788 | | - hover
789 | | - focus
790 | | - active
791 | | - group-hover
792 | |
793 | | To disable a module completely, use `false` instead of an array.
794 | |
795 | */
796 |
797 | modules: {
798 | appearance: ['responsive'],
799 | backgroundAttachment: ['responsive'],
800 | backgroundColors: ['responsive', 'hover', 'focus'],
801 | backgroundPosition: ['responsive'],
802 | backgroundRepeat: ['responsive'],
803 | backgroundSize: ['responsive'],
804 | borderCollapse: [],
805 | borderColors: ['responsive', 'hover', 'focus'],
806 | borderRadius: ['responsive'],
807 | borderStyle: ['responsive'],
808 | borderWidths: ['responsive', 'hover'],
809 | cursor: ['responsive', 'hover'],
810 | display: ['responsive'],
811 | flexbox: ['responsive'],
812 | float: ['responsive'],
813 | fonts: ['responsive'],
814 | fontWeights: ['responsive', 'hover', 'focus'],
815 | height: ['responsive'],
816 | leading: ['responsive'],
817 | lists: ['responsive'],
818 | margin: ['responsive'],
819 | maxHeight: ['responsive'],
820 | maxWidth: ['responsive'],
821 | minHeight: ['responsive'],
822 | minWidth: ['responsive'],
823 | negativeMargin: ['responsive'],
824 | opacity: ['responsive'],
825 | outline: ['focus'],
826 | overflow: ['responsive'],
827 | padding: ['responsive'],
828 | pointerEvents: ['responsive'],
829 | position: ['responsive'],
830 | resize: ['responsive'],
831 | shadows: ['responsive', 'hover', 'focus'],
832 | svgFill: [],
833 | svgStroke: [],
834 | tableLayout: ['responsive'],
835 | textAlign: ['responsive'],
836 | textColors: ['responsive', 'hover', 'focus'],
837 | textSizes: ['responsive'],
838 | textStyle: ['responsive', 'hover', 'focus'],
839 | tracking: ['responsive'],
840 | userSelect: ['responsive'],
841 | verticalAlign: ['responsive'],
842 | visibility: ['responsive'],
843 | whitespace: ['responsive'],
844 | width: ['responsive'],
845 | zIndex: ['responsive'],
846 | },
847 |
848 |
849 | /*
850 | |-----------------------------------------------------------------------------
851 | | Plugins https://tailwindcss.com/docs/plugins
852 | |-----------------------------------------------------------------------------
853 | |
854 | | Here is where you can register any plugins you'd like to use in your
855 | | project. Tailwind's built-in `container` plugin is enabled by default to
856 | | give you a Bootstrap-style responsive container component out of the box.
857 | |
858 | | Be sure to view the complete plugin documentation to learn more about how
859 | | the plugin system works.
860 | |
861 | */
862 |
863 | plugins: [
864 | require('tailwindcss/plugins/container')({
865 | // center: true,
866 | // padding: '1rem',
867 | }),
868 | ],
869 |
870 |
871 | /*
872 | |-----------------------------------------------------------------------------
873 | | Advanced Options https://tailwindcss.com/docs/configuration#options
874 | |-----------------------------------------------------------------------------
875 | |
876 | | Here is where you can tweak advanced configuration options. We recommend
877 | | leaving these options alone unless you absolutely need to change them.
878 | |
879 | */
880 |
881 | options: {
882 | prefix: '',
883 | important: false,
884 | separator: ':',
885 | },
886 |
887 | }
888 |
--------------------------------------------------------------------------------