Sabtu 23 November 2019

This commit is contained in:
Damillora 2019-11-23 15:58:59 +07:00
parent fb35b2f5fb
commit a28b0eea95
12 changed files with 1981 additions and 11 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
node_modules

View File

@ -0,0 +1,221 @@
@tailwind base;
html {
@apply min-h-screen;
}
body {
@apply min-h-screen;
}
.input-group {
@apply py-2;
}
.input-group label {
@apply text-lg;
}
input[type=text], input[type=password] {
@apply border-gray-500 border px-2 py-2 rounded w-full bg-white;
}
select {
@apply border-gray-500 border px-2 py-2 rounded bg-white text-yuika-blue-500 appearance-none;
}
textarea {
@apply border-gray-500 border px-2 py-2 rounded w-full bg-white;
}
button {
@apply rounded px-2 py-2 text-white bg-yuika-blue-500;
}
h1 {
@apply text-4xl;
}
h2 {
@apply text-3xl;
}
h3 {
@apply text-2xl;
}
h4 {
@apply text-xl;
}
h5 {
@apply text-lg;
}
h6 {
@apply text-base;
}
hr {
@apply my-4;
}
code {
@apply bg-gray-200 border border-gray-500 py-1 px-2 text-yuika-blue-700;
}
dt {
@apply float-left mr-4 text-lg text-yuika-blue-700;
}
dd {
@apply text-base text-gray-700;
}
ol {
@apply list-decimal;
}
ul {
@apply list-disc;
}
td, th {
@apply border border-gray-500 py-2 px-2;
}
th {
@apply bg-gray-200 text-yuika-blue-700;
}
pre {
@apply bg-gray-200 py-2 px-2 border-gray-500;
}
pre code {
@apply border-none;
}
blockquote {
@apply block pl-8 border-l-4 border-yuika-blue-500 my-2;
}
a {
@apply text-yuika-blue-500;
}
header {
@apply h-16 w-full z-10 flex flex-row justify-start items-center px-4 text-white text-lg bg-yuika-blue-500;
min-height: 3rem;
}
.header-link {
@apply px-2 text-white;
}
footer {
@apply h-16 w-full z-10 flex flex-row justify-start items-center px-4 text-white text-lg bg-yuika-blue-500;
min-height: 3rem;
}
main {
@apply mx-auto w-full py-4 px-4;
min-height: calc(100vh - 8rem);
}
.header-middle {
@apply flex-grow;
}
.form-title {
@apply text-4xl text-center mb-4;
}
#forumbrowser {
@apply flex flex-row justify-start items-start;
}
.forumbrowser-left {
@apply flex flex-col mx-1;
}
.forumbrowser-item {
@apply px-2 border-r-2 border-white text-yuika-blue-500 cursor-pointer flex flex-col justify-center items-end h-8 transition-colors;
}
.forumbrowser-item.selected {
@apply border-yuika-blue-500 bg-yuika-blue-100 transition-colors;
}
.forumbrowser-item:hover {
@apply bg-yuika-blue-100 transition-colors;
}
.forumbrowser-right-table {
@apply flex flex-col flex-grow;
}
.forumbrowser-right {
@apply text-left py-2 px-1 flex flex-row h-8 border-white border-l-2 text-yuika-blue-500 cursor-pointer transition-colors;
}
.forumbrowser-right.selected {
@apply border-yuika-blue-500 bg-yuika-blue-100 transition-colors;
}
.forumbrowser-right:hover {
@apply bg-yuika-blue-100 transition-colors;
}
.forumbrowser-right-col {
@apply px-2 flex flex-col justify-center items-start;
}
.forum-post {
@apply border my-4 border-yuika-blue-500;
}
.forum-post-title {
@apply h-12 w-full text-white py-2 px-2 flex flex-row justify-start items-center flex flex-row bg-yuika-blue-500;
}
.forum-post-content {
@apply flex flex-row py-2 px-2;
min-height: 200px;
}
.forum-post-user {
@apply w-1/6 py-2 px-4 flex flex-col;
}
.forum-post-user-detail {
@apply flex flex-col justify-center;
}
.forum-post-user-detail img{
@apply rounded-full w-full;
}
.forum-post-text {
@apply w-5/6 py-2 px-2;
}
.forum-post-profile {
@apply w-5/6 py-2 px-2 flex flex-col;
}
.forum-post-profile-detail {
@apply flex flex-row;
}
.forum-post-profile-about {
min-height: 100px;
}
.forum-post-footer {
@apply h-12 w-full py-2 flex flex-row justify-start items-center;
}
.forum-post-footer-left {
@apply px-2;
}
.forum-post-footer-mid {
@apply flex-grow px-2;
}
.forum-post-footer-right {
@apply px-2;
}
.forum-post-footer-action {
@apply px-4 cursor-pointer border-b-2 border-white py-2;
}
.forum-post-footer-action:hover {
@apply bg-gray-200 border-yuika-blue-500 transition-colors;
}
.forum-post-footer-action.danger:hover{
@apply bg-red-200 border-red-500 text-red-700 transition-colors;
}
.lock-message {
@apply bg-red-200 py-4 px-4 border-red-500 border my-2 mx-2;
}
#forumbrowser {
@apply flex flex-row my-4;
}
#editor-poster {
@apply h-full;
}
@tailwind components;
@tailwind utilities;

View File

@ -28,4 +28,10 @@ class Post extends DBModel {
$id = Thread::find($this->thread_id)->main_post->id; $id = Thread::find($this->thread_id)->main_post->id;
return ($id == $this->id); return ($id == $this->id);
} }
public function is_favorited() {
$query = new QueryBuilder();
$query = $query->where('user_id',ServiceContainer::Authentication()->user()->id)->where('post_id',$this->id);
$is_fav = UserFavorite::selectOne($query);
return isset($is_fav);
}
} }

File diff suppressed because it is too large Load Diff

View File

@ -28,7 +28,12 @@
</div> </div>
<div class="forum-post-footer-mid"> <div class="forum-post-footer-mid">
<select name="duration"> <select name="duration">
<option value="+ 1 hour">1 hours</option>
<option value="+ 6 hour">6 hours</option> <option value="+ 6 hour">6 hours</option>
<option value="+ 24 hour">24 hours</option>
<option value="+ 72 hour">3 days</option>
<option value="+ 7 day">1 week</option>
<option value="+ 30 day">1 month</option>
<option value="2099-12-31 23:59">indefinitely</option> <option value="2099-12-31 23:59">indefinitely</option>
</select> </select>
<select name="action"> <select name="action">

View File

@ -63,16 +63,16 @@ This thread has been locked for <?php echo $thread->lock()->duration ?>. See the
<?php if($post->user_id == $auth->user()->id) { ?> <?php if($post->user_id == $auth->user()->id) { ?>
<a class="forum-post-footer-action" @click="reply(<?php echo $post->id ?>)">Reply</a> <a class="forum-post-footer-action" @click="reply(<?php echo $post->id ?>)">Reply</a>
<a class="forum-post-footer-action" @click="edit(<?php echo $post->id ?>)">Edit</a> <a class="forum-post-footer-action" @click="edit(<?php echo $post->id ?>)">Edit</a>
<a class="forum-post-footer-action" @click="delete_post(<?php echo $post->id ?>)">Delete</a> <a class="forum-post-footer-action danger" @click="delete_post(<?php echo $post->id ?>)">Delete</a>
<?php } else { ?> <?php } else { ?>
<a class="forum-post-footer-action" @click="favorite(<?php echo $post->id ?>)">Favorite</a> <a class="forum-post-footer-action" @click="favorite(<?php echo $post->id ?>)"><?php echo $post->is_favorited() ? 'Unfavorite' : 'Favorite' ?></a>
<a class="forum-post-footer-action" @click="reply(<?php echo $post->id ?>)">Reply</a> <a class="forum-post-footer-action" @click="reply(<?php echo $post->id ?>)">Reply</a>
<?php if(!$auth->user()->didIModerateThis($thread->category()->id) && $auth->user()->is_confirmed ) { ?> <?php if(!$auth->user()->didIModerateThis($thread->category()->id) && $auth->user()->is_confirmed ) { ?>
<a class="forum-post-footer-action" @click="report(<?php echo $post->id ?>)">Report Abuse</a> <a class="forum-post-footer-action danger" @click="report(<?php echo $post->id ?>)">Report Abuse</a>
<?php } ?> <?php } ?>
<?php } ?> <?php } ?>
<?php if($auth->user()->didIModerateThis($thread->category()->id) || $auth->user()->is_admin ) { ?> <?php if($auth->user()->didIModerateThis($thread->category()->id) || $auth->user()->is_admin ) { ?>
<a class="forum-post-footer-action" @click="moderate(<?php echo $post->id ?>)">Moderate</a> <a class="forum-post-footer-action danger" @click="moderate(<?php echo $post->id ?>)">Moderate</a>
<?php } ?> <?php } ?>
<?php } ?> <?php } ?>
</div> </div>

View File

@ -1,13 +1,13 @@
# Metaforums # Metaforums
An online web-based discussion forum application An online web-based discussion forum application
## How to set up ## How to set up
1. Make sure mod_rewrite is enabled on Apache. 1. Make sure mod_rewrite is enabled on Apache.
2. Create a MySQL / MariaDB database, and import Metaforums' schema (`schema.sql`) into the database. 2. Create a MySQL / MariaDB database, and import Metaforums' schema (`schema.sql`) into the database.
3. Modify backend/config.php and adjust the configuration as needed. 3. Modify config.php and adjust the configuration as needed.
4. Point the browser to `localhost` 4. Put all project files in the DocumentRoot (this application cannot be in a subfolder)
5. Point the browser to `localhost` or wherever the application is located.
## Sample database data ## Sample database data
@ -40,11 +40,20 @@ An online web-based discussion forum application
### Post sources ### Post sources
"A Full Style Test" is courtesy of [Ghost's demo blog](https://demo.ghost.io/style-test/), used to test styling.
## Project Structure ## Project Structure
- index.php - index.php
The main handler of backend functions. Handles routing, loading of Application services, and response handling. The main handler of backend functions. Handles routing, loading of Application services, and response handling.
- autoload.php
Autoload is a PHP OOP feature that allows automatic loading of classes using the use keyword. This file provides
a simple autoloading function.
- routes.php
This files lists all routes used by the application
- config.php
This file contains application configuration.
- Application/ - Application/
Application contains classes that are the core of the application itself Application contains classes that are the core of the application itself
- Assets/ - Assets/
@ -53,14 +62,24 @@ An online web-based discussion forum application
Controllers contain controllers that return HTTP responses Controllers contain controllers that return HTTP responses
- Foundations/ - Foundations/
Foundations are helper classes for various functions, such as an SQL query builder, and base model implementation; Foundations are helper classes for various functions, such as an SQL query builder, and base model implementation;
- DateHelper
Contains date facilities.
- MailBuilder
Contains a mail composing class.
- Model
The base model implementation. Contains common code for all models.
- SQLHelper - SQLHelper
Contains SQL escaping facilities. Contains SQL escaping facilities.
- QueryBuilder - QueryBuilder
The SQL query builder. The SQL query builder.
- Model
The base model implementation. Contains common code for all models.
- HTTP - HTTP
HTTP contains a number of abstractions for HTTP, such as Request class. HTTP contains a number of abstractions for HTTP, such as Request class.
- Request
Abstracts away PHP request parameters.
- Response
Abstracts away responses, including status code, views, and JSON data.
- File
Handles uploaded files
- Models/ - Models/
Models contain database models. Models contain database models.
- Services/ - Services/
@ -81,6 +100,8 @@ An online web-based discussion forum application
Provides view rendering facilities Provides view rendering facilities
- Static/ - Static/
Static contains static files served directly by the application. For example, this contains built CSS. Static contains static files served directly by the application. For example, this contains built CSS.
- Storage/
This is where application storage are saved.
- Views/ - Views/
Views contains all views used by the application Views contains all views used by the application
@ -102,6 +123,18 @@ Here, jQuery is mainly used for its AJAX functionality.
[Project Website](https://jquery.com) [Project Website](https://jquery.com)
### TinyMCE
TinyMCE is a JavaScrip text editor.
[Project Website](https://www.tiny.cloud)
### tailwindcss-transitions
Tailwind CSS plugin to generate transition utilities
[Project Website](https://github.com/benface/tailwindcss-transitions)
## CSS Frameworks and Styles used ## CSS Frameworks and Styles used
### Tailwind ### Tailwind

2
build_css.sh Executable file
View File

@ -0,0 +1,2 @@
#!/bin/bash
npx tailwind build Application/Assets/metaforums.css -o Application/Static/css/metaforums.css

6
package.json Normal file
View File

@ -0,0 +1,6 @@
{
"dependencies": {
"tailwindcss": "^1.1.3",
"tailwindcss-transitions": "^2.1.0"
}
}

157
schema.sql Normal file
View File

@ -0,0 +1,157 @@
-- Adminer 4.7.5 MySQL dump
SET NAMES utf8;
SET time_zone = '+00:00';
SET NAMES utf8mb4;
CREATE TABLE `category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`group_id` int(11) NOT NULL,
`category_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `group_id` (`group_id`),
CONSTRAINT `category_ibfk_1` FOREIGN KEY (`group_id`) REFERENCES `group` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `group` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`group_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `moderatorcategory` (
`user_id` int(11) NOT NULL,
`category_id` int(11) NOT NULL,
PRIMARY KEY (`user_id`,`category_id`),
KEY `category_id` (`category_id`),
CONSTRAINT `moderatorcategory_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`),
CONSTRAINT `moderatorcategory_ibfk_2` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `post` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`thread_id` int(11) DEFAULT NULL,
`user_id` int(11) NOT NULL,
`title` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
`post` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
`created_at` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE current_timestamp(),
`updated_at` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE current_timestamp(),
PRIMARY KEY (`id`),
KEY `thread_id` (`thread_id`),
KEY `user_id` (`user_id`),
CONSTRAINT `post_ibfk_1` FOREIGN KEY (`thread_id`) REFERENCES `thread` (`id`),
CONSTRAINT `post_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `thread` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`category_id` int(11) NOT NULL,
`title` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
`author` int(11) NOT NULL,
`view_count` int(11) NOT NULL DEFAULT 0,
`lock_moderator` int(11) DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `author` (`author`),
KEY `category_id` (`category_id`),
KEY `lock_moderator` (`lock_moderator`),
CONSTRAINT `thread_ibfk_1` FOREIGN KEY (`author`) REFERENCES `user` (`id`),
CONSTRAINT `thread_ibfk_2` FOREIGN KEY (`lock_moderator`) REFERENCES `user` (`id`),
CONSTRAINT `thread_ibfk_3` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`),
CONSTRAINT `thread_ibfk_4` FOREIGN KEY (`lock_moderator`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`about` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
`email` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
`email_visible` tinyint(1) NOT NULL,
`avatar_path` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
`password` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`role` int(11) NOT NULL,
`is_confirmed` tinyint(1) NOT NULL,
`is_deactivated` tinyint(1) NOT NULL DEFAULT 0,
`last_login` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE current_timestamp(),
`logged_in` tinyint(1) NOT NULL DEFAULT 0,
`created_at` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE current_timestamp(),
`updated_at` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE current_timestamp(),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `useraction` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`category_id` int(11) DEFAULT NULL,
`thread_id` int(11) DEFAULT NULL,
`action_type` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
`reason` varchar(300) COLLATE utf8mb4_unicode_ci NOT NULL,
`action_at` datetime NOT NULL,
`expired_at` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
KEY `category_id` (`category_id`),
KEY `thread_id` (`thread_id`),
CONSTRAINT `useraction_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`),
CONSTRAINT `useraction_ibfk_2` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`),
CONSTRAINT `useraction_ibfk_3` FOREIGN KEY (`thread_id`) REFERENCES `thread` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `userchange` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`action_type` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
`confirm_key` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`data` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`best_before` datetime NOT NULL,
`is_confirmed` tinyint(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
KEY `confirm_key` (`confirm_key`),
CONSTRAINT `userchange_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `userconfirmation` (
`confirm_key` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`user_id` int(11) NOT NULL,
`best_before` datetime NOT NULL,
PRIMARY KEY (`confirm_key`),
KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `userfavorite` (
`post_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
KEY `post_id` (`post_id`),
KEY `user_id` (`user_id`),
CONSTRAINT `userfavorite_ibfk_1` FOREIGN KEY (`post_id`) REFERENCES `post` (`id`),
CONSTRAINT `userfavorite_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `userreport` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`post_id` int(11) NOT NULL,
`reason` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
`report_date` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
KEY `post_id` (`post_id`),
CONSTRAINT `userreport_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`),
CONSTRAINT `userreport_ibfk_2` FOREIGN KEY (`post_id`) REFERENCES `post` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 2019-11-20 20:22:32

33
tailwind.config.js Normal file
View File

@ -0,0 +1,33 @@
module.exports = {
theme: {
transitionProperty: {
'none': 'none',
'all': 'all',
'color': 'color',
'bg': 'background-color',
'border': 'border-color',
'colors': ['color', 'background-color', 'border-color'],
'opacity': 'opacity',
'transform': 'transform',
},
extend: {
colors: {
'yuika-blue': {
'100': '#C6E7F8',
'200': '#9FD3F0',
'300': '#7BBEE5',
'400': '#5AA7D7',
'500': '#3B90C6',
'600': '#2E72AA',
'700': '#22558C',
'800': '#173B6C',
'900': '#0E254C',
}
},
}
},
variants: {},
plugins: [
require('tailwindcss-transitions')(),
],
}

372
yarn.lock Normal file
View File

@ -0,0 +1,372 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
dependencies:
color-convert "^1.9.0"
autoprefixer@^9.4.5:
version "9.7.2"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.2.tgz#26cf729fbb709323b40171a874304884dcceffed"
integrity sha512-LCAfcdej1182uVvPOZnytbq61AhnOZ/4JelDaJGDeNwewyU1AMaNthcHsyz1NRjTmd2FkurMckLWfkHg3Z//KA==
dependencies:
browserslist "^4.7.3"
caniuse-lite "^1.0.30001010"
chalk "^2.4.2"
normalize-range "^0.1.2"
num2fraction "^1.2.2"
postcss "^7.0.23"
postcss-value-parser "^4.0.2"
balanced-match@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
dependencies:
balanced-match "^1.0.0"
concat-map "0.0.1"
browserslist@^4.7.3:
version "4.7.3"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.3.tgz#02341f162b6bcc1e1028e30624815d4924442dc3"
integrity sha512-jWvmhqYpx+9EZm/FxcZSbUZyDEvDTLDi3nSAKbzEkyWvtI0mNSmUosey+5awDW1RUlrgXbQb5A6qY1xQH9U6MQ==
dependencies:
caniuse-lite "^1.0.30001010"
electron-to-chromium "^1.3.306"
node-releases "^1.1.40"
bytes@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
camelcase-css@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
caniuse-lite@^1.0.30001010:
version "1.0.30001011"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001011.tgz#0d6c4549c78c4a800bb043a83ca0cbe0aee6c6e1"
integrity sha512-h+Eqyn/YA6o6ZTqpS86PyRmNWOs1r54EBDcd2NTwwfsXQ8re1B38SnB+p2RKF8OUsyEIjeDU8XGec1RGO/wYCg==
chalk@^2.4.1, chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
dependencies:
ansi-styles "^3.2.1"
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
color-convert@^1.9.0:
version "1.9.3"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
dependencies:
color-name "1.1.3"
color-name@1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
css-unit-converter@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996"
integrity sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=
cssesc@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
electron-to-chromium@^1.3.306:
version "1.3.311"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.311.tgz#73baa361e2b1f44b7b4f1a443aaa1372f8074ebb"
integrity sha512-7GH6RKCzziLzJ9ejmbiBEdzHZsc6C3eRpav14dmRfTWMpNgMqpP1ukw/FU/Le2fR+ep642naq7a23xNdmh2s+A==
escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
fs-extra@^8.0.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
dependencies:
graceful-fs "^4.2.0"
jsonfile "^4.0.0"
universalify "^0.1.0"
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
glob@^7.1.2:
version "7.1.6"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^3.0.4"
once "^1.3.0"
path-is-absolute "^1.0.0"
graceful-fs@^4.1.6, graceful-fs@^4.2.0:
version "4.2.3"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
has-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
indexes-of@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
dependencies:
once "^1.3.0"
wrappy "1"
inherits@2:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
jsonfile@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
optionalDependencies:
graceful-fs "^4.1.6"
lodash.toarray@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561"
integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE=
lodash@^4.17.11, lodash@^4.17.15:
version "4.17.15"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
dependencies:
brace-expansion "^1.1.7"
node-emoji@^1.8.1:
version "1.10.0"
resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da"
integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==
dependencies:
lodash.toarray "^4.4.0"
node-releases@^1.1.40:
version "1.1.41"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.41.tgz#57674a82a37f812d18e3b26118aefaf53a00afed"
integrity sha512-+IctMa7wIs8Cfsa8iYzeaLTFwv5Y4r5jZud+4AnfymzeEXKBCavFX0KBgzVaPVqf0ywa6PrO8/b+bPqdwjGBSg==
dependencies:
semver "^6.3.0"
normalize-range@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
normalize.css@^8.0.1:
version "8.0.1"
resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3"
integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==
num2fraction@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=
object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
once@^1.3.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
dependencies:
wrappy "1"
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
postcss-functions@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/postcss-functions/-/postcss-functions-3.0.0.tgz#0e94d01444700a481de20de4d55fb2640564250e"
integrity sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4=
dependencies:
glob "^7.1.2"
object-assign "^4.1.1"
postcss "^6.0.9"
postcss-value-parser "^3.3.0"
postcss-js@^2.0.0:
version "2.0.3"
resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-2.0.3.tgz#a96f0f23ff3d08cec7dc5b11bf11c5f8077cdab9"
integrity sha512-zS59pAk3deu6dVHyrGqmC3oDXBdNdajk4k1RyxeVXCrcEDBUBHoIhE4QTsmhxgzXxsaqFDAkUZfmMa5f/N/79w==
dependencies:
camelcase-css "^2.0.1"
postcss "^7.0.18"
postcss-nested@^4.1.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-4.2.1.tgz#4bc2e5b35e3b1e481ff81e23b700da7f82a8b248"
integrity sha512-AMayXX8tS0HCp4O4lolp4ygj9wBn32DJWXvG6gCv+ZvJrEa00GUxJcJEEzMh87BIe6FrWdYkpR2cuyqHKrxmXw==
dependencies:
postcss "^7.0.21"
postcss-selector-parser "^6.0.2"
postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2:
version "6.0.2"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c"
integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==
dependencies:
cssesc "^3.0.0"
indexes-of "^1.0.1"
uniq "^1.0.1"
postcss-value-parser@^3.3.0:
version "3.3.1"
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
postcss-value-parser@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9"
integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==
postcss@^6.0.9:
version "6.0.23"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324"
integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==
dependencies:
chalk "^2.4.1"
source-map "^0.6.1"
supports-color "^5.4.0"
postcss@^7.0.11, postcss@^7.0.18, postcss@^7.0.21, postcss@^7.0.23:
version "7.0.23"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.23.tgz#9f9759fad661b15964f3cfc3140f66f1e05eadc1"
integrity sha512-hOlMf3ouRIFXD+j2VJecwssTwbvsPGJVMzupptg+85WA+i7MwyrydmQAgY3R+m0Bc0exunhbJmijy8u8+vufuQ==
dependencies:
chalk "^2.4.2"
source-map "^0.6.1"
supports-color "^6.1.0"
pretty-hrtime@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1"
integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=
reduce-css-calc@^2.1.6:
version "2.1.7"
resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-2.1.7.tgz#1ace2e02c286d78abcd01fd92bfe8097ab0602c2"
integrity sha512-fDnlZ+AybAS3C7Q9xDq5y8A2z+lT63zLbynew/lur/IR24OQF5x98tfNwf79mzEdfywZ0a2wpM860FhFfMxZlA==
dependencies:
css-unit-converter "^1.1.1"
postcss-value-parser "^3.3.0"
semver@^6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
source-map@^0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
supports-color@^5.3.0, supports-color@^5.4.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
dependencies:
has-flag "^3.0.0"
supports-color@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
dependencies:
has-flag "^3.0.0"
tailwindcss-transitions@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/tailwindcss-transitions/-/tailwindcss-transitions-2.1.0.tgz#54ca6c293a197300c5eb1ab3775dc29f083432f1"
integrity sha512-WafCC+ujZk2rUECdBoFeF8lKTmrrpNudrHxSHNikYfaYyVR7BRRqpB2n49/wxzg8/YWy8OK42MvQnFuJBb2yxw==
dependencies:
lodash "^4.17.15"
tailwindcss@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-1.1.3.tgz#ad154f78e1e44060e32e3ed44b27287c2be126a6"
integrity sha512-8sa/QO+blnu3WXUylsgvYZlUbBpVH36QeGuZxgSGqp1dF3g4AGe1azt8FsO8i8Hfe9Oyvwhx3iSjRDak3nngeQ==
dependencies:
autoprefixer "^9.4.5"
bytes "^3.0.0"
chalk "^2.4.1"
fs-extra "^8.0.0"
lodash "^4.17.11"
node-emoji "^1.8.1"
normalize.css "^8.0.1"
postcss "^7.0.11"
postcss-functions "^3.0.0"
postcss-js "^2.0.0"
postcss-nested "^4.1.1"
postcss-selector-parser "^6.0.0"
pretty-hrtime "^1.0.3"
reduce-css-calc "^2.1.6"
uniq@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
universalify@^0.1.0:
version "0.1.2"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=