Compare commits

..

No commits in common. "master" and "no-jquery" have entirely different histories.

43 changed files with 4016 additions and 5410 deletions

View File

@ -1,39 +0,0 @@
---
name: Showcase Proposal
about: Proposal to publish a new content into wiki's Showcase page.
title: Proposal of showcase project - PROJECT_NAME
labels: showcase
assignees: ''
---
> Showcase proposal template
> Note: "*" fields are mandatory.
> Project Name: The name of the project that will be used as title of the section of the showcase.
Project Name *:
> Project Description: The description of the project that will be used as a paragraph after the title of the showcase.
Project Description *:
> Project Author: The author of the project that will be informed after the project description. (Keep if blank to don't show the author)
Project Author:
> Project Links: Links to access the project showcase. These links will be shown after project description.
Project Links:
> Project Images: Images of the project (can be the images with legends, or the links to it).
Project Images *:
> Additional Information: Other relevant information.
Additional Information:
> Feedback: If you want to give a feedback to the project, or a suggestion, please, enjoy this field!
Feedback:

View File

@ -1,19 +0,0 @@
---
name: Showcase Removal
about: Remove a published content from wiki's Showcase page.
title: Removal of showcase project - PROJECT_NAME
labels: showcase
assignees: ''
---
> Remove showcase project template
> "*" fields are mandatory.
> Project Name: The name of the project to be removed from showcase page.
Project Name *:
> Reason: The reason for removal
Reason *:

View File

@ -1,60 +0,0 @@
# TuiCss ChangeLog
### This is the change log of TuiCss. Here you can find the documentations of the feature of each released version
#### 2.1.1
Bugs
- Fixed memory leak due to setinterval for clocks: https://github.com/vinibiavatti1/TuiCss/pull/29
- Imported media queries classes to tuicss.scss: https://github.com/vinibiavatti1/TuiCss/issues/30
Examples
- Created the mobile example
#### 2.1.0
- .disabled classes
- Fixed the default radius border of inputs
- Removed pointer events of checkbox and radio button
- Tabs and buttons example pages
- Remove padding of inputs
- .no-border util
- Forecast example
#### 2.0.0
- Jquery removed (Now use vanilla Javascript)
- Chart example page
- Readme update
- Changelog markdown
- Chart component
- NPM Package
#### 1.0.0
- Utilities
- Examples
- DOS font
- Wiki documentation
- Button component
- Checkbox component
- Divider component
- Dropdown component
- Fieldset component
- Input component
- Navbar component
- Panel component
- Progressbar component
- Radio component
- Scrollbar component
- Sidenav component
- Statusbar component
- Table component
- Tablegrid component
- Tabs component
- Textarea component
- Window component
- Screen component
- Datetime component
- Shortcut component
- Shadow component
- Background component
- Border component
- Grid component
- Modal component

View File

@ -1 +0,0 @@
Click [here](https://github.com/vinibiavatti1/TuiCss/wiki/Contributing) to access the contributing page on the wiki!

View File

@ -1,37 +1,9 @@
<p align="center">
<a href="https://github.com/vinibiavatti1/TuiCss">
<img src="https://raw.githubusercontent.com/vinibiavatti1/TuiCss/develop/resources/TUICSS%20Logo%20160x160%20transparent.png" />
</a>
</p>
# TuiCss
### Text-based user interface CSS library
<h3 align="center">TuiCss</h3>
TuiCss is a library focused to create web applications using an interface based in ASCII table, like MS-DOS applications. This kind of interface is very eligible because the ultra-contrast colors used and the less effects of the elements. The main framework thats is following to develop TuiCss is <a href="https://en.wikipedia.org/wiki/Turbo_Vision">Turbo Vision Framework</a> with some techniques with [box-drawing characters](https://en.wikipedia.org/wiki/Box-drawing_character), but some others frameworks were checked too, like [curses](https://en.wikipedia.org/wiki/Curses_(programming_library)), [ncurses](https://en.wikipedia.org/wiki/Ncurses), [Newt](https://en.wikipedia.org/wiki/Newt_(programming_library)), etc. Check the examples page in the wiki to see some creations!
<p align="center">
Text-based user interface CSS library
<br>
<a href="https://github.com/vinibiavatti1/TuiCss/wiki"><strong>-- Documentation --</strong></a>
<br>
<a href="https://github.com/vinibiavatti1/TuiCss/wiki/Showcase"><strong>-- Showcase --</strong></a>
<br><br>
<a href="https://badge.fury.io/js/tuicss">
<img src="https://badge.fury.io/js/tuicss.svg" alt="npm version badge">
</a>
</p>
### About
TuiCss is a library focused to create web applications using an interface based on ASCII table, like the old MS-DOS applications. This kind of interface is very legible because the ultra-contrast colors used and because the reduced effects used on the components in the view. The base of this project is <a href="https://en.wikipedia.org/wiki/Turbo_Vision">Turbo Vision Framework</a>, but some other frameworks were also checked to introduce some features to TuiCss, like [curses](https://en.wikipedia.org/wiki/Curses_(programming_library)), [ncurses](https://en.wikipedia.org/wiki/Ncurses), [Newt](https://en.wikipedia.org/wiki/Newt_(programming_library)), etc. Check the examples page in the wiki to stay on top of some creations, or check the getting started page to start using this library!
<img src="https://raw.githubusercontent.com/vinibiavatti1/TuiCss/develop/resources/TUICSS%20Demo.png" width="676">
### Getting Started
To start to use TuiCss in your project, you can just download the repository content and import the files that are in the dist folder with the html directives. Alternatively, you can install the package with NPM using the following command:
```bash
$ npm install tuicss
```
For more details, visit the [Getting Started Page](https://github.com/vinibiavatti1/TuiCss/wiki/Getting-Started) in the repository wiki.
<img src="https://i.ibb.co/zhJMy1h/Tui-Css-home.png" width="600">
### Documentation
Check the [repository wiki](https://github.com/vinibiavatti1/TuiCss/wiki) to access the documentation, components index, examples, styles, or to know how to contribute to this project.
Check the [repository wiki](https://github.com/vinibiavatti1/TuiCss/wiki) to access the documentation, getting started, components index, examples, styles, or to know how to contribute for this project.

2821
dist/tuicss.css vendored

File diff suppressed because it is too large Load Diff

71
dist/tuicss.js vendored
View File

@ -30,12 +30,6 @@ function tabsController() {
for (const tab of tabs) {
// Add click listeners to them.
tab.addEventListener('click', function (e) {
// Check if the clicked tab is disabled
if(e.target.classList.contains("disabled")) {
return;
}
// Remove the 'active' class from any and all tabs.
for (const otherTab of tabs) {
otherTab.classList.remove('active');
@ -99,46 +93,45 @@ function datetimeController() {
// Kick off our clock interval stuff.
datetimeInterval();
// Synchronize time and set interval to control the clocks
setTimeout(() => {
setInterval(datetimeInterval, 1000);
}, 1000 - new Date().getMilliseconds());
setInterval(datetimeInterval, 1000);
function datetimeInterval() {
for (const clock of clocks) {
if (clock === null) {
continue;
}
// Set the interval.
const interval = setInterval(() => {
// Technically we should have already returned earlier in the code, but to be on the safe side.
if (clock === null) {
clearInterval(interval);
return;
}
// Get the format we want to display in the element.
let format = clock.getAttribute('data-format');
// Get the format we want to display in the element.
let format = clock.getAttribute('data-format');
// parse out the date and time into constants.
const today = new Date();
const month = (today.getMonth() + 1).toString().padStart(2, '0');
const day = today.getDate().toString().padStart(2, '0');
const dayOfWeek = (today.getDay() + 1).toString().padStart(2, '0');
const year = today.getFullYear().toString();
const hour = today.getHours().toString().padStart(2, '0');
const hour12 = (parseInt(hour) + 24) % '12' || '12';
const minute = today.getMinutes().toString().padStart(2, '0');
const second = today.getSeconds().toString().padStart(2, '0');
const ampm = parseInt(hour) >= 12 ? 'PM' : 'AM';
// parse out the date and time into constants.
const today = new Date();
const month = (today.getMonth() + '').length === 2 ? today.getMonth() + 1 : '0' + (today.getMonth() + 1);
const day = (today.getDay() + '').length === 2 ? today.getDay() + 1 : '0' + (today.getDay() + 1);
const year = today.getFullYear() + '';
const hour = (today.getHours() + '').length === 2 ? today.getHours() : '0' + today.getHours();
const hour12 = (parseInt(hour) + 24) % '12' || '12';
const minute = (today.getMinutes() + '').length === 2 ? today.getMinutes() : '0' + today.getMinutes();
const second = (today.getSeconds() + '').length === 2 ? today.getSeconds() : '0' + today.getSeconds();
const ampm = parseInt(hour) >= 12 ? 'PM' : 'AM';
// Replace based on the format.
format = format.replace('M', month);
format = format.replace('d', day);
format = format.replace('e', dayOfWeek);
format = format.replace('y', year);
format = format.replace('H', hour);
format = format.replace('h', hour12);
format = format.replace('m', minute);
format = format.replace('s', second);
format = format.replace('a', ampm);
// Replace based on the format.
format = format.replace('M', month);
format = format.replace('d', day);
format = format.replace('y', year);
format = format.replace('H', hour);
format = format.replace('h', hour12);
format = format.replace('m', minute);
format = format.replace('s', second);
format = format.replace('a', ampm);
// Show it in the element.
clock.innerHTML = format;
// Show it in the element.
clock.innerHTML = format;
});
}
}
}

2
dist/tuicss.min.css vendored

File diff suppressed because one or more lines are too long

2
dist/tuicss.min.js vendored
View File

@ -1 +1 @@
function domReady(t){document.addEventListener("DOMContentLoaded",t),"interactive"!==document.readyState&&"complete"!==document.readyState||t()}function tabsController(){const t=document.getElementsByClassName("tui-tab");if(!t.length)return;for(const e of t)e.addEventListener("click",function(e){if(e.target.classList.contains("disabled"))return;for(const e of t)e.classList.remove("active");const o=document.getElementsByClassName("tui-tab-content");if(!o)throw"No tab content elements found.";for(const t of o)t.style.display="none";const n=e.target.getAttribute("data-tab-content");if(n){const t=document.getElementById(n);if(!t)throw'No tab content element with id "'+n+'" found.';t.style.display="block"}e.target.classList.add("active")});const e=document.querySelector(".tui-tab.active");e?e.click():t[0].click()}function datetimeController(){const t=document.getElementsByClassName("tui-datetime");function e(){for(const e of t){if(null===e)continue;let t=e.getAttribute("data-format");const o=new Date,n=(o.getMonth()+1).toString().padStart(2,"0"),a=o.getDate().toString().padStart(2,"0"),c=(o.getDay()+1).toString().padStart(2,"0"),s=o.getFullYear().toString(),i=o.getHours().toString().padStart(2,"0"),l=(parseInt(i)+24)%"12"||"12",r=o.getMinutes().toString().padStart(2,"0"),d=o.getSeconds().toString().padStart(2,"0"),u=parseInt(i)>=12?"PM":"AM";t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace("M",n)).replace("d",a)).replace("e",c)).replace("y",s)).replace("H",i)).replace("h",l)).replace("m",r)).replace("s",d)).replace("a",u),e.innerHTML=t}}t.length&&(e(),setTimeout(()=>{setInterval(e,1e3)},1e3-(new Date).getMilliseconds()))}function sidenavController(){const t=document.querySelector(".tui-sidenav-button");t&&t.addEventListener("click",()=>{const t=document.querySelector(".tui-sidenav");if(!t)throw"No sidenav element found.";t.classList.contains("active")?t.classList.remove("active"):t.classList.add("active")})}function modalController(){const t=document.querySelector(".tui-overlap");if(!t)return;const e=document.getElementsByClassName("tui-modal-button");for(const o of e)o.addEventListener("click",e=>{t.classList.add("active");const o=e.target.getAttribute("data-modal");if(!o)throw"Modal close button data-modal attribute is empty or not set.";{const t=document.getElementById(o);if(!t)throw'No modal element with id of "'+o+'" found.';t.classList.add("active")}});const o=document.getElementsByClassName("tui-modal-close-button");if(e.length>0&&!o.length)throw"No modal close buttons found.";for(const e of o)e.addEventListener("click",e=>{t.classList.remove("active");const o=e.target.getAttribute("data-modal");if(!o)throw"Modal close button data-modal attribute is empty or not set.";{const t=document.getElementById(o);if(!t)throw'No modal element with id of "'+o+'" found.';t.classList.remove("active")}})}domReady(function(){tabsController(),datetimeController(),sidenavController(),modalController()});
function domReady(t){document.addEventListener("DOMContentLoaded",t),"interactive"!==document.readyState&&"complete"!==document.readyState||t()}function tabsController(){const t=document.getElementsByClassName("tui-tab");if(!t.length)return;for(const e of t)e.addEventListener("click",function(e){for(const e of t)e.classList.remove("active");const o=document.getElementsByClassName("tui-tab-content");if(!o)throw"No tab content elements found.";for(const t of o)t.style.display="none";const n=e.target.getAttribute("data-tab-content");if(n){const t=document.getElementById(n);if(!t)throw'No tab content element with id "'+n+'" found.';t.style.display="block"}e.target.classList.add("active")});const e=document.querySelector(".tui-tab.active");e?e.click():t[0].click()}function datetimeController(){const t=document.getElementsByClassName("tui-datetime");function e(){for(const e of t){const t=setInterval(()=>{if(null===e)return void clearInterval(t);let o=e.getAttribute("data-format");const n=new Date,a=2===(n.getMonth()+"").length?n.getMonth()+1:"0"+(n.getMonth()+1),s=2===(n.getDay()+"").length?n.getDay()+1:"0"+(n.getDay()+1),c=n.getFullYear()+"",l=2===(n.getHours()+"").length?n.getHours():"0"+n.getHours(),i=(parseInt(l)+24)%"12"||"12",r=2===(n.getMinutes()+"").length?n.getMinutes():"0"+n.getMinutes(),d=2===(n.getSeconds()+"").length?n.getSeconds():"0"+n.getSeconds(),u=parseInt(l)>=12?"PM":"AM";o=(o=(o=(o=(o=(o=(o=(o=o.replace("M",a)).replace("d",s)).replace("y",c)).replace("H",l)).replace("h",i)).replace("m",r)).replace("s",d)).replace("a",u),e.innerHTML=o})}}t.length&&(e(),setInterval(e,1e3))}function sidenavController(){const t=document.querySelector(".tui-sidenav-button");t&&t.addEventListener("click",()=>{const t=document.querySelector(".tui-sidenav");if(!t)throw"No sidenav element found.";t.classList.contains("active")?t.classList.remove("active"):t.classList.add("active")})}function modalController(){const t=document.querySelector(".tui-overlap");if(!t)return;const e=document.getElementsByClassName("tui-modal-button");for(const o of e)o.addEventListener("click",e=>{t.classList.add("active");const o=e.target.getAttribute("data-modal");if(!o)throw"Modal close button data-modal attribute is empty or not set.";{const t=document.getElementById(o);if(!t)throw'No modal element with id of "'+o+'" found.';t.classList.add("active")}});const o=document.getElementsByClassName("tui-modal-close-button");if(e.length>0&&!o.length)throw"No modal close buttons found.";for(const e of o)e.addEventListener("click",e=>{t.classList.remove("active");const o=e.target.getAttribute("data-modal");if(!o)throw"Modal close button data-modal attribute is empty or not set.";{const t=document.getElementById(o);if(!t)throw'No modal element with id of "'+o+'" found.';t.classList.remove("active")}})}domReady(function(){tabsController(),datetimeController(),sidenavController(),modalController()});

View File

@ -24,22 +24,22 @@
<tbody>
<tr>
<td rowspan="2" width="60%" class="blue-168-text">
<br>System Time.........:<input type="text" class="tui-input white-168 black-text" value="[09:21:30]" style="width: 150px" />
<br>System Date.........:<input type="text" class="tui-input white-168 black-text" value="[15/09/1994]" style="width: 150px" />
<br>System Time.........:<input type="text" class="tui-input white-168 black-text" value="[09:21:30]" style="width: 135px" />
<br>System Date.........:<input type="text" class="tui-input white-168 black-text" value="[15/09/1994]" style="width: 135px" />
<br>
<br>Legacy Diskette A...:<input type="text" class="tui-input white-168 black-text" value="[1.44/1.25 MB]" style="width: 150px" />
<br>Legacy Diskette B...:<input type="text" class="tui-input white-168 black-text" value="[disabeld]" style="width: 150px" />
<br>Legacy Diskette A...:<input type="text" class="tui-input white-168 black-text" value="[1.44/1.25 MB]" style="width: 135px" />]
<br>Legacy Diskette B...:<input type="text" class="tui-input white-168 black-text" value="[disabeld]" style="width: 135px" />
<br>
<br>Primary Master......:<input type="text" class="tui-input white-168 black-text" value="[None]" style="width: 150px" />
<br>Primary Slave.......:<input type="text" class="tui-input white-168 black-text" value="[None]" style="width: 150px" />
<br>Secondary Master....:<input type="text" class="tui-input white-168 black-text" value="[CD-ROM]" style="width: 150px" />
<br>Secondary Slave.....:<input type="text" class="tui-input white-168 black-text" value="[None]" style="width: 150px" />
<br>Primary Master......:<input type="text" class="tui-input white-168 black-text" value="[None]" style="width: 135px" />
<br>Primary Slave.......:<input type="text" class="tui-input white-168 black-text" value="[None]" style="width: 135px" />
<br>Secondary Master....:<input type="text" class="tui-input white-168 black-text" value="[CD-ROM]" style="width: 135px" />
<br>Secondary Slave.....:<input type="text" class="tui-input white-168 black-text" value="[None]" style="width: 135px" />
<br>
<br>Keyboard Features...:<input type="text" class="tui-input white-168 black-text" value="[Enter]" style="width: 150px" />
<br>Keyboard Features...:<input type="text" class="tui-input white-168 black-text" value="[Enter]" style="width: 135px" />
<br>
<br>System Memory.......:<input type="text" class="tui-input white-168 black-text" value="[640 KB]" style="width: 150px" />
<br>Extended Memory.....:<input type="text" class="tui-input white-168 black-text" value="[3568410 KB]" style="width: 150px" />
<br>Boot-time Diagnostic:<input type="text" class="tui-input white-168 black-text" value="[Enabled]" style="width: 150px" />
<br>System Memory.......:<input type="text" class="tui-input white-168 black-text" value="[640 KB]" style="width: 135px" />
<br>Extended Memory.....:<input type="text" class="tui-input white-168 black-text" value="[3568410 KB]" style="width: 135px" />
<br>Boot-time Diagnostic:<input type="text" class="tui-input white-168 black-text" value="[Enabled]" style="width: 135px" />
</td>
<td width="40%" class="center">Item Specified Help</td>
</tr>

View File

@ -1,34 +0,0 @@
<!DOCTYPE html>
<html lang="en" class="tui-bg-blue-black">
<head>
<meta charset="UTF-8">
<title>Buttons Example</title>
<script src="../dist/tuicss.min.js"></script>
<link rel="stylesheet" href="../dist/tuicss.min.css">
<style>
.tui-button {
width: 100% !important;
margin-bottom: 20px;
}
</style>
</head>
<style>
</style>
<body>
<div class="center" style="margin-top: 100px;">
<div class="tui-window blue-168" style="width: 200px;">
<fieldset class="tui-fieldset">
<legend>Buttons</legend>
<button class="tui-button">Button</button><br>
<input type="button" class="tui-button" value="Input" /><br>
<a href="#!" class="tui-button">Anchor</a><br>
<button class="tui-button orange-168 white-text">Custom</button><br>
<button class="tui-button red-168 disabled" disabled>Disabled</button><br>
<button class="tui-button" style="margin-bottom: 5px;">Focused</button><br>
</fieldset>
</div>
</div>
</body>
</html>

View File

@ -4,8 +4,100 @@
<head>
<meta charset="UTF-8">
<title>Chart Example</title>
<script src="plugins/jquery-3.4.1.min.js"></script>
<script src="../dist/tuicss.min.js"></script>
<link rel="stylesheet" href="../dist/tuicss.min.css">
<style>
.tui-chart-vertical {
position: relative;
background-color: black;
}
.tui-chart-horizontal {
position: relative;
background-color: black;
}
.tui-chart-vertical .tui-chart-display {
display: flex;
position: absolute;
top: 0px;
left: 50px;
right: 0px;
bottom: 30px;
align-items: flex-end;
border-bottom: 2px solid white;
border-left: 2px solid white;
}
.tui-chart-horizontal .tui-chart-display {
display: flex;
position: absolute;
flex-direction: column;
top: 0px;
left: 50px;
right: 0px;
bottom: 30px;
align-items: stretch;
border-bottom: 2px solid white;
border-left: 2px solid white;
}
.tui-chart-x-axis {
display: flex;
position: absolute;
height: 30px;
left: 50px;
right: 0px;
bottom: 0px;
line-height: 30px;
}
.tui-chart-y-axis {
display: flex;
flex-direction: column;
position: absolute;
top: 0px;
left: 0px;
bottom: 30px;
width: 50px;
}
.tui-chart-vertical .tui-chart-x-axis .tui-chart-legend {
flex-basis: 100%;
text-align: center;
}
.tui-chart-vertical .tui-chart-y-axis .tui-chart-legend {
flex: 1;
text-align: right;
padding-right: 2px;
display: flex;
align-items: flex-start;
justify-content: flex-end;
}
.tui-chart-horizontal .tui-chart-x-axis .tui-chart-legend {
flex-basis: 100%;
text-align: right;
}
.tui-chart-horizontal .tui-chart-y-axis .tui-chart-legend {
flex: 1;
text-align: right;
padding-right: 2px;
display: flex;
align-items: center;
justify-content: flex-end;
}
.tui-chart-vertical .tui-chart-display .tui-chart-value {
margin: 0px 30px;
flex-basis: 100%;
text-align: center;
}
.tui-chart-horizontal .tui-chart-display .tui-chart-value {
margin: 5px 0px;
flex: 1;
text-align: right;
display: flex;
align-items: center;
align-content: flex-start;
justify-content: flex-end;
}
</style>
</head>
<body class="center">
@ -13,34 +105,23 @@
<div class="tui-window black-168 left-align">
<fieldset class="tui-fieldset">
<legend class="">Vertical Chart</legend>
<legend class="">Vertical Bar Chart</legend>
<div class="tui-chart-vertical" style="width: 500px; height: 200px;">
<div class="tui-chart-display">
<div class="tui-chart-value red-168 animated" style="height: 80%;">80%</div>
<div class="tui-chart-value green-168" style="height: 30%;">30%</div>
<div class="tui-chart-value blue-168" style="height: 50%;">50%</div>
<div class="tui-chart-value yellow-168" style="height: 90%;">90%</div>
<div class="tui-chart-value purple-168" style="height: 60%;">60%</div>
<div class="tui-chart-value orange-168" style="height: 100%;">100%</div>
<div class="tui-chart-value cyan-168" style="height: 10%;">10%</div>
<div class="tui-chart-value red-168" style="height: 75%;">75%</div>
<div class="tui-chart-value red-168" style="height: 80%;">80%</div>
<div class="tui-chart-value green-168" style="height: 60%;">60%</div>
<div class="tui-chart-value blue-168" style="height: 100%;">100%</div>
</div>
<div class="tui-chart-y-axis">
<div class="tui-chart-legend">100%</div>
<div class="tui-chart-legend">80%</div>
<div class="tui-chart-legend">60%</div>
<div class="tui-chart-legend">40%</div>
<div class="tui-chart-legend">20%</div>
<div class="tui-chart-legend">75%</div>
<div class="tui-chart-legend">50%</div>
<div class="tui-chart-legend">25%</div>
</div>
<div class="tui-chart-x-axis">
<div class="tui-chart-legend">s1</div>
<div class="tui-chart-legend">s2</div>
<div class="tui-chart-legend">s3</div>
<div class="tui-chart-legend">s4</div>
<div class="tui-chart-legend">s5</div>
<div class="tui-chart-legend">s6</div>
<div class="tui-chart-legend">s7</div>
<div class="tui-chart-legend">s8</div>
<div class="tui-chart-legend">2018</div>
<div class="tui-chart-legend">2019</div>
<div class="tui-chart-legend">2020</div>
</div>
</div>
</fieldset>
@ -49,7 +130,7 @@
<div class="tui-window black-168 left-align">
<fieldset class="tui-fieldset">
<legend class="">Horizontal Chart</legend>
<legend class="">Horizontal Bar Chart</legend>
<div class="tui-chart-horizontal" style="width: 500px; height: 200px;">
<div class="tui-chart-display">
<div class="tui-chart-value red-168" style="width: 80%;">80%</div>
@ -70,22 +151,5 @@
</div>
</fieldset>
</div>
<br><br>
<div class="tui-window black-168 left-align">
<fieldset class="tui-fieldset">
<legend class="">Chart (no axis legend)</legend>
<div class="tui-chart-vertical" style="width: 500px; height: 200px;">
<div class="tui-chart-display no-x-axis no-y-axis">
<div class="tui-chart-value red-168 animated" style="height: 50%;">50%</div>
<div class="tui-chart-value green-168" style="height: 70%;">70%</div>
<div class="tui-chart-value blue-168" style="height: 30%;">30%</div>
<div class="tui-chart-value yellow-168" style="height: 100%;">100%</div>
</div>
</div>
</fieldset>
</div>
<br><br>
</body>
</html>

View File

@ -1,172 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Forecast Example</title>
<script src="../dist/tuicss.min.js"></script>
<link rel="stylesheet" href="../dist/tuicss.min.css">
<style>
th, td {
padding: 10px!important;
border: none!important;
}
.tui-progress-bar {
margin-bottom: -4px;
}
</style>
</head>
<body>
<div class="tui-screen-800-600 bordered black-255" style="padding: 2px;">
<div class="red-168 full-width white-text" style="padding: 0px 10px;">
FORECAST 1.0
</div>
<br>
<table class="tui-table full-width no-border">
<thead class="white-255-text tui-border-double orange-168-border" style="margin-bottom: 5px;">
<tr class="left-align">
<th>#</th>
<th>LOCATION</th>
<th>TEMPERATURE</th>
<th>STATUS</th>
</tr>
</thead>
<tbody class="tui-border-double orange-168-border">
<tr>
<td class="red-168-text">1</td>
<td>Lisbon</td>
<td>
<span class="green-168-text">&nbsp;8.0</span>
[
<div class="tui-progress-bar inline-block tui-bg-red-black" style="width: 350px;">
<span class="tui-progress red-255" style="width: 58%"></span>
</div>
]
</td>
<td class="blue-255-text">COLD</td>
</tr>
<tr>
<td class="red-168-text">2</td>
<td>Vancouver</td>
<td>
<span class="green-168-text">&nbsp;9.0</span>
[
<div class="tui-progress-bar inline-block tui-bg-red-black" style="width: 350px;">
<span class="tui-progress red-255" style="width: 59%"></span>
</div>
]
</td>
<td class="blue-255-text">COLD</td>
</tr>
<tr>
<td class="red-168-text">3</td>
<td>Rio</td>
<td>
<span class="green-168-text">31.0</span>
[
<div class="tui-progress-bar inline-block tui-bg-red-black" style="width: 350px;">
<span class="tui-progress red-255" style="width: 81%"></span>
</div>
]
</td>
<td class="yellow-255-text">WARM</td>
</tr>
<tr>
<td class="red-168-text">4</td>
<td>Sydney</td>
<td>
<span class="green-168-text">22.0</span>
[
<div class="tui-progress-bar inline-block tui-bg-red-black" style="width: 350px;">
<span class="tui-progress red-255" style="width: 72%"></span>
</div>
]
</td>
<td class="yellow-255-text">WARM</td>
</tr>
<tr>
<td class="red-168-text">5</td>
<td>New York</td>
<td>
<span class="green-168-text">&nbsp;7.0</span>
[
<div class="tui-progress-bar inline-block tui-bg-red-black" style="width: 350px;">
<span class="tui-progress red-255" style="width: 57%"></span>
</div>
]
</td>
<td class="blue-255-text">COLD</td>
</tr>
<tr>
<td class="red-168-text">6</td>
<td>London</td>
<td>
<span class="green-168-text">&nbsp;6.0</span>
[
<div class="tui-progress-bar inline-block tui-bg-red-black" style="width: 350px;">
<span class="tui-progress red-255" style="width: 56%"></span>
</div>
]
</td>
<td class="blue-255-text">COLD</td>
</tr>
<tr>
<td class="red-168-text">7</td>
<td>Paris</td>
<td>
<span class="green-168-text">&nbsp;4.0</span>
[
<div class="tui-progress-bar inline-block tui-bg-red-black" style="width: 350px;">
<span class="tui-progress red-255" style="width: 54%"></span>
</div>
]
</td>
<td class="cyan-255-text">VERY COLD</td>
</tr>
<tr>
<td class="red-168-text">8</td>
<td>Casablanca</td>
<td>
<span class="green-168-text">17.0</span>
[
<div class="tui-progress-bar inline-block tui-bg-red-black" style="width: 350px;">
<span class="tui-progress red-255" style="width: 67%"></span>
</div>
]
</td>
<td class="green-168-text">NORMAL</td>
</tr>
<tr>
<td class="red-168-text">9</td>
<td>Reykjavik</td>
<td>
<span class="green-168-text">-1.0</span>
[
<div class="tui-progress-bar inline-block tui-bg-red-black" style="width: 350px;">
<span class="tui-progress red-255" style="width: 49%"></span>
</div>
]
</td>
<td class="cyan-255-text">VERY COLD</td>
</tr>
</tbody>
</table>
<div class="purple-168 full-width white-text" style="padding: 0px 10px; margin-top: 2px;">
<span class="red-168">HIGH</span>: Rio 31.0<br>
<span class="cyan-168">LESS</span>: Reykjavik -1.0
</div>
<br>
<div class="tui-window full-width no-shadow black">
<fieldset class="tui-fieldset center">
<button class="tui-button left">Previous</button>
<span class="center">9/201 records</span>
<button class="tui-button right">Next</button>
</fieldset>
</div>
<div class="red-168 full-width white-text" style="padding: 0px 10px;">
FORECAST 1.0
</div>
</div>
</body>
</html>

View File

@ -1,14 +1,14 @@
<!DOCTYPE html>
<html lang="en" class="tui-bg-blue-black tui-cursor">
<html lang="en" class="tui-bg-blue-black">
<head>
<meta charset="UTF-8">
<title>Input Example</title>
<title>Inputs Example</title>
<script src="../dist/tuicss.min.js"></script>
<link rel="stylesheet" href="../dist/tuicss.min.css">
<style>
.tui-input {
width: 430px;
width: 300px;
}
</style>
</head>
@ -18,7 +18,6 @@
<fieldset class="tui-fieldset">
<legend class="center">Form</legend>
Text.......: <input class="tui-input" value="text" /><br>
Disabled...: <input class="tui-input disabled" disabled value="disabled" /><br>
Number.....: <input class="tui-input" type="number" value="25" /><br>
Password...: <input class="tui-input" type="password" value="12345" /><br>
Color......: <input class="tui-input" type="color" value="#00FF00" /><br>
@ -26,11 +25,6 @@
<option>First</option>
<option>Second</option>
<option>Third</option>
<optgroup label="Group">
<option>First</option>
<option>Second</option>
<option>Third</option>
</optgroup>
</select><br>
Date.......: <input class="tui-input" type="date" value="2019-01-01" /><br>
Time.......: <input class="tui-input" type="datetime-local" value="2019-01-01T12:00" />
@ -45,8 +39,8 @@
<input type="checkbox" />
<span></span>
</label>
<label class="tui-checkbox disabled">Disabled
<input type="checkbox" disabled />
<label class="tui-checkbox">Third
<input type="checkbox" />
<span></span>
</label>
</fieldset>
@ -61,17 +55,14 @@
<input type="radio" name="radio" />
<span></span>
</label>
<label class="tui-radio disabled">Disabled
<input type="radio" name="radio" disabled />
<label class="tui-radio">Third
<input type="radio" name="radio" />
<span></span>
</label>
</fieldset>
<br>
Textarea<br>
<textarea class="tui-input" style="width: 100%">Content ...</textarea>
<br>
Disabled Textarea<br>
<textarea class="tui-input disabled" disabled style="width: 100%">Disabled</textarea>
<textarea class="tui-input" style="width: 100%"></textarea>
<br>
Multiple<br>
<select multiple class="tui-input" style="width: 100%">
@ -79,11 +70,6 @@
<option>First</option>
<option>Second</option>
<option>Third</option>
<optgroup label="Group">
<option>First</option>
<option>Second</option>
<option>Third</option>
</optgroup>
</select><br>
File <input class="tui-input full-width" type="file" />
</fieldset>

View File

@ -1,171 +0,0 @@
<!DOCTYPE html>
<html lang="en" class="no-tui-scroll">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mobile Example</title>
<script src="../dist/tuicss.min.js"></script>
<link rel="stylesheet" href="../dist/tuicss.min.css">
<style>
.content {
padding: 40px 0px;
}
.post-img {
width: 100%;
border: 4px solid black;
}
.add-btn {
bottom: 0px;
left: 0;
right: 0;
margin-left: auto;
margin-right: auto;
z-index: 999;
width: 50px;
height: 50px;
}
.post {
margin-bottom: 5px;
width: 100%;
}
</style>
</head>
<body class="tui-bg-blue-black relative">
<!-- Sidenav -->
<nav class="tui-sidenav absolute">
<ul>
<li>
<a href="#!">
<span class="red-168-text">P</span>rofile
<span class="tui-shortcut">ctrl+p</span>
</a>
</li>
<li>
<a href="#!">
<span class="red-168-text">S</span>earch
<span class="tui-shortcut">ctrl+s</span>
</a>
</li>
<li>
<a href="#!">
S<span class="red-168-text">t</span>ory
<span class="tui-shortcut">ctrl+t</span>
</a>
</li>
</ul>
</nav>
<!-- Navbar -->
<nav class="tui-nav">
<span class="tui-datetime" data-format="h:m:s a"></span>
<ul>
<li class="tui-sidenav-button red-168-text"></li>
<li class="tui-dropdown hide-on-med-and-down">
<span class="red-168-text">P</span>rofile
<div class="tui-dropdown-content">
<ul>
<li>
<a href="#!">
<span class="red-168-text">A</span>vatar
</a>
</li>
<li>
<a href="#!">
P<span class="red-168-text">r</span>eferences
<span class="tui-shortcut">F3</span>
</a>
</li>
<li class="tui-dropdown block">
<span class="right"></span>
<span class="red-168-text">M</span>ore
<div class="tui-dropdown-content">
<ul>
<li>
<a href="#!">
<span class="red-168-text">I</span>diom
</a>
</li>
<li>
<a href="#!">
<span class="red-168-text">B</span>locked Users
</a>
</li>
</ul>
</div>
</li>
<div class="tui-black-divider"></div>
<li>
<a href="#!">
<span class="red-168-text">S</span>tories
<span class="tui-shortcut">F10</span>
</a>
</li>
</ul>
</div>
</li>
<li class="tui-dropdown hide-on-med-and-down">
<span class="red-168-text">H</span>elp
</li>
</ul>
</nav>
<!-- Edit panel -->
<div class="content container">
<div class="row">
<div class="col s12 m12 l12 white-text center">
<h3>InstaTui</h3>
<hr>
The best old-school social network<br>
<span class="orange-255 black-text hide-on-small-only">(Try this in a mobile view)</span>
<span class="green-255 black-text hide-on-med-and-up">(√ Mobile view)</span>
</div>
</div>
<div class="row">
<div class="col s12 m4 l4">
<div class="post tui-window">
<fieldset class="tui-fieldset">
John Due says:
<hr>
<img class="post-img" src="resources/winxp.png" />
The winxp bg is amazing!
</fieldset>
</div>
</div>
<div class="col s12 m4 l4">
<div class="post tui-window">
<fieldset class="tui-fieldset">
Jane Due says:
<hr>
<img class="post-img" src="resources/disks.png" />
Bought my first 2 PC games!
</fieldset>
</div>
</div>
<div class="col s12 m4 l4">
<div class="post tui-window">
<fieldset class="tui-fieldset">
Astronaut says:
<hr>
<img class="post-img" src="resources/step.png" />
One small step for man one giant leap for mankind
</fieldset>
</div>
</div>
</div>
</div>
<!-- Status bar -->
<div class="tui-statusbar fixed" style="bottom: 0px;">
<ul>
<li class="right" style="margin-right: 10px;"><a href="#!">Search</a></li>
<li><a href="#!">Profile</a></li>
</ul>
</div>
<button class="tui-button red-168 white-255-text fixed add-btn">+</button>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

View File

@ -1,40 +0,0 @@
<!DOCTYPE html>
<html lang="en" class="tui-bg-blue-black">
<head>
<meta charset="UTF-8">
<title>Tabs Example</title>
<script src="../dist/tuicss.min.js"></script>
<link rel="stylesheet" href="../dist/tuicss.min.css">
</head>
<style>
</style>
<body>
<div class="center" style="margin-top: 100px; margin-bottom: 100px;">
<div class="tui-panel white-168" style="width: 400px;">
<div class="tui-tabs red-168">
<ul>
<li><a class="tui-tab active" data-tab-content="tab-1-content">Tab 1</a></li>
<li><a class="tui-tab" data-tab-content="tab-2-content">Tab 2</a></li>
<li><a class="tui-tab disabled" data-tab-content="tab-3-content">Disabled</a></li>
</ul>
</div>
<div class="content black-255-text">
<div class="tui-tab-content" id="tab-1-content">
<h3>Content 1</h3>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Sit incidunt ullam nemo ad id. Temporibus, impedit reiciendis quidem ea quasi fugiat! Illum unde eaque porro sint voluptates corporis reiciendis tempora?
</div>
<div class="tui-tab-content" id="tab-2-content">
<h3>Content 2</h3>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Sit incidunt ullam nemo ad id.
</div>
<div class="tui-tab-content" id="tab-3-content">
<h3>Content 3</h3>
You could not see it!
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -156,7 +156,8 @@ int main()
About
</div>
<div class="tui-panel-content">
TuiCss v2.0.0 Made with ♥
Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br>
Curabitur id vestibulum libero, id fermentum lorem.
<br><br>
<div class="center">
<button class="tui-button white-255" style="width: 80px">OK</button>

View File

@ -1,6 +1,6 @@
const { series, src, dest } = require('gulp');
// const sass = require('gulp-sass');
const sass = require('gulp-sass')(require('sass'));
const sass = require('gulp-sass');
const gulpClean = require('gulp-clean');
const gulpMinify = require('gulp-minify');
const cleanCss = require('gulp-clean-css');
@ -13,14 +13,13 @@ function clean() {
.pipe(gulpClean());
}
// Compile scss and copy to dist folder (.css)
// Compile scss
function sassCompile() {
return src('src/tuicss.scss')
.pipe(sass())
.pipe(dest(distPath));
}
// Minify css and copy to dist folder (.min.css)
function minifyCss() {
return src(distPath + '/tuicss.css')
.pipe(cleanCss())
@ -30,13 +29,11 @@ function minifyCss() {
.pipe(dest(distPath));
}
// Copy js script to dist folder (.js)
function copyScript() {
return src('src/js/tuicss.js')
.pipe(dest(distPath));
}
// Minify js script and copy to dist folder (.min.js)
function minifyJs() {
return src(distPath + '/tuicss.js')
.pipe(gulpMinify({
@ -47,19 +44,16 @@ function minifyJs() {
.pipe(dest(distPath));
}
// Copy images to dist folder (/images)
function copyImages() {
return src('src/images/*')
.pipe(dest(distPath + "/images"));
}
// Copy fonts to dist folder (/fonts)
function copyFonts() {
return src('src/fonts/*')
.pipe(dest(distPath + "/fonts"));
}
// Export
exports.default = series(clean, sassCompile, minifyCss, copyScript, minifyJs, copyImages, copyFonts);

5593
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +1,12 @@
{
"name": "tuicss",
"version": "2.1.2",
"description": "TuiCss is a library for developing Web applications that uses text-based user interface applications (TUI) as a style",
"version": "1.0.0",
"description": "TuiCss is a framework made to develop text-based user interface applications (TUI)",
"keywords": [
"tui",
"text based user interface",
"frontend",
"css",
"frameword",
"turbo vision",
"tuicss",
"ncurses",
"msdos",
"ascii"
"TUI",
"Text based user interface",
"Turbo vision",
"TuiCss"
],
"main": "dist/tuicss.min.css",
"scripts": {
@ -34,8 +28,7 @@
"gulp-clean-css": "^4.3.0",
"gulp-copy": "^4.0.1",
"gulp-minify": "^3.1.0",
"gulp-rename": "^2.0.0",
"gulp-sass": "^5.1.0",
"sass": "^1.62.1"
"gulp-rename": "^1.4.0",
"gulp-sass": "^4.1.0"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 827 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 585 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 528 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

View File

@ -10,11 +10,7 @@
cursor: pointer;
text-align: center;
box-shadow: 10px 10px black;
border-radius: 0px;
@include disable-select;
&.disabled {
text-decoration: line-through;
}
}
.tui-button:active {
background-color: rgb(0, 168, 168)!important;

View File

@ -19,13 +19,6 @@
align-items: flex-end;
border-bottom: 2px solid white;
border-left: 2px solid white;
&.no-x-axis {
bottom: 0px;
}
&.no-y-axis {
left: 0px;
}
}
.tui-chart-horizontal .tui-chart-display {
display: flex;
@ -38,13 +31,6 @@
align-items: stretch;
border-bottom: 2px solid white;
border-left: 2px solid white;
&.no-x-axis {
bottom: 0px;
}
&.no-y-axis {
left: 0px;
}
}
/* Chart X axis */
@ -71,7 +57,7 @@
/* Chart legends */
.tui-chart-vertical .tui-chart-x-axis .tui-chart-legend {
flex: 0 1 100%;
flex-basis: 100%;
text-align: center;
}
.tui-chart-vertical .tui-chart-y-axis .tui-chart-legend {
@ -83,7 +69,7 @@
justify-content: flex-end;
}
.tui-chart-horizontal .tui-chart-x-axis .tui-chart-legend {
flex: 0 1 100%;
flex-basis: 100%;
text-align: right;
}
.tui-chart-horizontal .tui-chart-y-axis .tui-chart-legend {
@ -97,16 +83,16 @@
/* Chart value */
.tui-chart-vertical .tui-chart-display .tui-chart-value {
flex: 0 1 100%;
margin: 0px 30px;
flex-basis: 100%;
text-align: center;
overflow: hidden;
}
.tui-chart-horizontal .tui-chart-display .tui-chart-value {
margin: 5px 0px;
flex: 1;
text-align: right;
display: flex;
align-items: center;
align-content: flex-start;
justify-content: flex-end;
overflow: hidden;
}

View File

@ -8,9 +8,6 @@
color: white;
padding-left: 30px;
@include disable-select;
&.disabled {
color: rgb(168, 168, 168)
}
}
.tui-checkbox input {
position: absolute;
@ -18,7 +15,6 @@
cursor: pointer;
top: 0px;
left: 0px;
pointer-events: none;
}
.tui-checkbox span {
position: absolute;

View File

@ -3,11 +3,7 @@
color: white;
outline:0;
border: none;
border-radius: 0px;
&.disabled {
background-color: rgb(168, 168, 168);
color: black;
}
padding: 1px;
}
.tui-input:focus {
background-color: rgb(255, 255, 0)!important;

View File

@ -8,9 +8,6 @@
color: white;
padding-left: 30px;
@include disable-select;
&.disabled {
color: rgb(168, 168, 168)
}
}
.tui-radio input {
position: absolute;
@ -18,7 +15,6 @@
cursor: pointer;
top: 0px;
left: 0px;
pointer-events: none;
}
.tui-radio span {
position: absolute;

View File

@ -15,7 +15,6 @@
.tui-screen-800-600,
.tui-screen-1024-768 {
position: relative;
overflow: hidden;
&.bordered{
border: 2px solid black;
}

View File

@ -20,9 +20,6 @@
background-color: rgb(168, 168, 168);
color: rgb(0, 0, 168);
}
&.disabled {
text-decoration: line-through;
}
}
.tui-tab-content {
display: none;

View File

@ -4,8 +4,4 @@
padding: 0px;
color: rgb(255, 255, 0);
outline: none;
&.disabled {
background-color: rgb(168, 168, 168);
color: black;
}
}

View File

@ -30,12 +30,6 @@ function tabsController() {
for (const tab of tabs) {
// Add click listeners to them.
tab.addEventListener('click', function (e) {
// Check if the clicked tab is disabled
if(e.target.classList.contains("disabled")) {
return;
}
// Remove the 'active' class from any and all tabs.
for (const otherTab of tabs) {
otherTab.classList.remove('active');
@ -99,46 +93,45 @@ function datetimeController() {
// Kick off our clock interval stuff.
datetimeInterval();
// Synchronize time and set interval to control the clocks
setTimeout(() => {
setInterval(datetimeInterval, 1000);
}, 1000 - new Date().getMilliseconds());
setInterval(datetimeInterval, 1000);
function datetimeInterval() {
for (const clock of clocks) {
if (clock === null) {
continue;
}
// Set the interval.
const interval = setInterval(() => {
// Technically we should have already returned earlier in the code, but to be on the safe side.
if (clock === null) {
clearInterval(interval);
return;
}
// Get the format we want to display in the element.
let format = clock.getAttribute('data-format');
// Get the format we want to display in the element.
let format = clock.getAttribute('data-format');
// parse out the date and time into constants.
const today = new Date();
const month = (today.getMonth() + 1).toString().padStart(2, '0');
const day = today.getDate().toString().padStart(2, '0');
const dayOfWeek = (today.getDay() + 1).toString().padStart(2, '0');
const year = today.getFullYear().toString();
const hour = today.getHours().toString().padStart(2, '0');
const hour12 = (parseInt(hour) + 24) % '12' || '12';
const minute = today.getMinutes().toString().padStart(2, '0');
const second = today.getSeconds().toString().padStart(2, '0');
const ampm = parseInt(hour) >= 12 ? 'PM' : 'AM';
// parse out the date and time into constants.
const today = new Date();
const month = (today.getMonth() + '').length === 2 ? today.getMonth() + 1 : '0' + (today.getMonth() + 1);
const day = (today.getDay() + '').length === 2 ? today.getDay() + 1 : '0' + (today.getDay() + 1);
const year = today.getFullYear() + '';
const hour = (today.getHours() + '').length === 2 ? today.getHours() : '0' + today.getHours();
const hour12 = (parseInt(hour) + 24) % '12' || '12';
const minute = (today.getMinutes() + '').length === 2 ? today.getMinutes() : '0' + today.getMinutes();
const second = (today.getSeconds() + '').length === 2 ? today.getSeconds() : '0' + today.getSeconds();
const ampm = parseInt(hour) >= 12 ? 'PM' : 'AM';
// Replace based on the format.
format = format.replace('M', month);
format = format.replace('d', day);
format = format.replace('e', dayOfWeek);
format = format.replace('y', year);
format = format.replace('H', hour);
format = format.replace('h', hour12);
format = format.replace('m', minute);
format = format.replace('s', second);
format = format.replace('a', ampm);
// Replace based on the format.
format = format.replace('M', month);
format = format.replace('d', day);
format = format.replace('y', year);
format = format.replace('H', hour);
format = format.replace('h', hour12);
format = format.replace('m', minute);
format = format.replace('s', second);
format = format.replace('a', ampm);
// Show it in the element.
clock.innerHTML = format;
// Show it in the element.
clock.innerHTML = format;
});
}
}
}

View File

@ -65,9 +65,6 @@
.no-padding {
padding: 0px!important;
}
.no-border {
border: none!important;
}
.content {
padding: 12px;
}
@ -80,8 +77,4 @@
}
.cursor-default {
cursor: default !important;
}
.disabled {
cursor: not-allowed!important;
}

View File

@ -1,6 +1,5 @@
/* Styles */
@import './styles/global.scss';
@import './styles/media.scss';
@import './styles/color.scss';
@import './styles/util.scss';