-
+
+
+
Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem atque ad quos placeat quidem earum corrupti? Ad, distinctio, maxime quasi illum ex consectetur necessitatibus et soluta quo sit ratione maiores.
diff --git a/app/components/accordions/accordions.js b/app/components/accordions/accordions.js
new file mode 100644
index 0000000..3d7bf52
--- /dev/null
+++ b/app/components/accordions/accordions.js
@@ -0,0 +1,88 @@
+// Clone / Components / Accordions
+
+// Old
+function accordionTriggerOld(trigger) {
+ var accordion = "[data-c-accordion='trigger']";
+ var content = "[data-c-accordion='content']";
+ if ($(trigger).parent(accordion).hasClass("active")) {
+ $(trigger).attr("aria-expanded", "false");
+ $(trigger).parent(accordion).removeClass("active");
+ $(trigger).parent(accordion).find(content).attr("aria-hidden", "true");
+ }
+ else {
+ $(trigger).attr("aria-expanded", "true");
+ $(trigger).parent(accordion).addClass("active");
+ $(trigger).parent(accordion).find(content).attr("aria-hidden", "false");
+ var siblingContent = $(trigger).siblings(content);
+ var focusableItems = focusable(siblingContent);
+ var firstFocusableItem = $(focusableItems).first();
+ if (focusableItems.length != 0) {
+ firstFocusableItem[0].focus();
+ }
+ }
+}
+
+$(document).ready(function () {
+ $(document).on("click", "[data-c-accordion='trigger']", function (e) {
+ e.preventDefault();
+ accordionTriggerOld(this);
+ });
+});
+
+// New (Empty Attribute)
+function accordionTrigger(trigger) {
+ var accordion = "[data-c-accordion='']";
+ var content = "[data-c-accordion-content]";
+ if ($(trigger).parent(accordion).hasClass("active")) {
+ $(trigger).attr("aria-expanded", "false");
+ $(trigger).parent(accordion).removeClass("active");
+ $(trigger).parent(accordion).find(content).attr("aria-hidden", "true");
+ }
+ else {
+ $(trigger).attr("aria-expanded", "true");
+ $(trigger).parent(accordion).addClass("active");
+ $(trigger).parent(accordion).find(content).attr("aria-hidden", "false");
+ var siblingContent = $(trigger).siblings(content);
+ var focusableItems = focusable(siblingContent);
+ var firstFocusableItem = $(focusableItems).first();
+ if (focusableItems.length != 0) {
+ firstFocusableItem[0].focus();
+ }
+ }
+}
+
+$(document).ready(function () {
+ $(document).on("click", "[data-c-accordion-trigger]", function (e) {
+ e.preventDefault();
+ accordionTrigger(this);
+ });
+});
+
+// New (React Fix)
+function accordionTriggerReact(trigger) {
+ var accordion = "[data-c-accordion='true']";
+ var content = "[data-c-accordion-content]";
+ if ($(trigger).parent(accordion).hasClass("active")) {
+ $(trigger).attr("aria-expanded", "false");
+ $(trigger).parent(accordion).removeClass("active");
+ $(trigger).parent(accordion).find(content).attr("aria-hidden", "true");
+ }
+ else {
+ $(trigger).attr("aria-expanded", "true");
+ $(trigger).parent(accordion).addClass("active");
+ $(trigger).parent(accordion).find(content).attr("aria-hidden", "false");
+ var siblingContent = $(trigger).siblings(content);
+ var focusableItems = focusable(siblingContent);
+ var firstFocusableItem = $(focusableItems).first();
+ if (focusableItems.length != 0) {
+ firstFocusableItem[0].focus();
+ }
+ }
+}
+
+$(document).ready(function () {
+ $(document).on("click", "[data-c-accordion-trigger]", function (e) {
+ e.preventDefault();
+ accordionTriggerReact(this);
+ });
+});
\ No newline at end of file
diff --git a/app/components/alerts/_alerts.scss b/app/components/alerts/_alerts.scss
new file mode 100644
index 0000000..04c0c1a
--- /dev/null
+++ b/app/components/alerts/_alerts.scss
@@ -0,0 +1,81 @@
+// Clone / Components / Alerts
+
+[data-clone] {
+
+ [data-c-alert] {
+ align-items: flex-start;
+ display: flex;
+ >div {
+ [data-c-alert="close-trigger"],
+ [data-c-alert-close-trigger] {
+ background: none;
+ border: none;
+ cursor: pointer;
+ float: right;
+ margin-top: calc((#{$clone-margin} / 2) * -1);
+ margin-right: calc((#{$clone-margin} / 2) * -1);
+ i {
+ margin-right: .15rem;
+ margin-left: .15rem;
+ }
+ }
+ p:first-of-type img,
+ span:first-of-type img {
+ max-width: 1.5rem;
+ vertical-align: middle;
+ }
+ }
+ i {
+ vertical-align: middle;
+ }
+ }
+ [data-c-alert-close-trigger] {
+ background: none;
+ border: none;
+ cursor: pointer;
+ span {
+ line-height: 1;
+ }
+ img {
+ max-width: 1.5rem;
+ }
+ }
+ [data-c-alert*="information"] {
+ background: mix(white, $clone-alert-information, 75%);
+ border: 1px solid darken($clone-alert-information, 25%);
+ color: darken($clone-alert-information, 25%);
+ * {
+ color: darken($clone-alert-information, 25%);
+ }
+ }
+ [data-c-alert*="warning"] {
+ background: mix(white, $clone-alert-warning, 75%);
+ border: 1px solid darken($clone-alert-warning, 25%);
+ color: darken($clone-alert-warning, 25%);
+ * {
+ color: darken($clone-alert-warning, 25%);
+ }
+ }
+ [data-c-alert*="error"] {
+ background: mix(white, $clone-alert-error, 75%);
+ border: 1px solid darken($clone-alert-error, 25%);
+ color: darken($clone-alert-error, 25%);
+ * {
+ color: darken($clone-alert-error, 25%);
+ }
+ }
+ [data-c-alert*="toast"] {
+ margin: 0 auto;
+ max-width: 90vw;
+ position: fixed;
+ right: 5vw;
+ bottom: 5vw;
+ z-index: 100000;
+ @media #{$clone-tablet-portrait} {
+ max-width: 35rem;
+ right: 2rem;
+ bottom: 2rem;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/components/alerts/alerts.html b/app/components/alerts/alerts.html
new file mode 100644
index 0000000..05a90f0
--- /dev/null
+++ b/app/components/alerts/alerts.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+ x
+
+
+
(!) Alert Title
+
+
+
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Saepe quia maiores in voluptate voluptatibus incidunt ut voluptas inventore earum facere unde veniam perspiciatis illo soluta, doloribus cum illum totam officia.
+
+
diff --git a/app/components/alerts/alerts.js b/app/components/alerts/alerts.js
new file mode 100644
index 0000000..bb5fc0e
--- /dev/null
+++ b/app/components/alerts/alerts.js
@@ -0,0 +1,27 @@
+// Clone / Components / Alerts
+
+// Old
+function alertTriggerOld(trigger) {
+ $(trigger).closest("[data-c-alert='information']").remove();
+ $(trigger).closest("[data-c-alert='warning']").remove();
+ $(trigger).closest("[data-c-alert='error']").remove();
+}
+
+$(document).ready(function () {
+ $(document).on("click", "[data-c-alert='close-trigger']", function (e) {
+ e.preventDefault();
+ alertTriggerOld(this);
+ });
+});
+
+// New
+function alertTrigger(trigger) {
+ $(trigger).closest("[data-c-alert]").remove();
+}
+
+$(document).ready(function () {
+ $(document).on("click", "[data-c-alert-close-trigger]", function (e) {
+ e.preventDefault();
+ alertTrigger(this);
+ });
+});
\ No newline at end of file
diff --git a/app/components/blockquotes/_blockquotes.scss b/app/components/blockquotes/_blockquotes.scss
new file mode 100644
index 0000000..1ebf093
--- /dev/null
+++ b/app/components/blockquotes/_blockquotes.scss
@@ -0,0 +1,17 @@
+// Clone / Components / Blockquotes
+
+[data-clone] {
+
+ // Clone: Blockquote Component
+ .clone-blockquote,
+ [data-c-blockquote] {
+ background: rgba($clone-blockquote-color, .2);
+ border-left: .25rem solid darken($clone-blockquote-color, 10%);
+ .clone-blockquote-author,
+ [data-c-blockquote-source] {
+ color: darken($clone-blockquote-color, 10%);
+ text-align: right;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/components/blockquotes/blockquotes.html b/app/components/blockquotes/blockquotes.html
new file mode 100644
index 0000000..a291197
--- /dev/null
+++ b/app/components/blockquotes/blockquotes.html
@@ -0,0 +1,6 @@
+
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Reprehenderit deleniti perferendis cumque velit suscipit veritatis expedita tenetur, ducimus nostrum! Cum aliquam delectus saepe fugiat accusamus ipsam laudantium unde ipsa quas!
+
+ - Source
+
diff --git a/app/components/blockquotes/blockquotes.js b/app/components/blockquotes/blockquotes.js
new file mode 100644
index 0000000..cef2490
--- /dev/null
+++ b/app/components/blockquotes/blockquotes.js
@@ -0,0 +1 @@
+// Clone / Components / Blockquotes
\ No newline at end of file
diff --git a/app/scss/components/_button.scss b/app/components/buttons/_buttons.scss
similarity index 62%
rename from app/scss/components/_button.scss
rename to app/components/buttons/_buttons.scss
index 60357d0..ec6ba58 100644
--- a/app/scss/components/_button.scss
+++ b/app/components/buttons/_buttons.scss
@@ -1,66 +1,46 @@
-// =============================================================================
+// Clone / Components / Buttons
- // Clone
- // Buttons
+[data-clone] {
-// =============================================================================
-
-a[data-c-button] {
- display: inline-block;
- max-width: 100%;
- text-decoration: underline;
- vertical-align: middle;
-}
-
-[data-c-button]:not([data-c-button="reset"]) {
- cursor: pointer;
- font-family: $clone-font-default;
- font-size: $clone-default-font-size;
- outline: none;
- text-align: center;
- transition: all .2s ease;
- padding: calc(#{$clone-padding} / 2) #{$clone-padding};
- @media #{$clone-tablet-portrait} {
- padding: calc((#{$clone-padding} / 2) * #{$clone-whitespace-multiplier}) calc(#{$clone-padding} * #{$clone-whitespace-multiplier});
- }
- @media #{$clone-desktop-large} {
- padding: calc(((#{$clone-padding} / 2) * #{$clone-whitespace-multiplier}) * #{$clone-whitespace-multiplier}) calc((#{$clone-padding} * #{$clone-whitespace-multiplier}) * #{$clone-whitespace-multiplier});
- }
-
- i {
- font-size: inherit;
- line-height: 1;
- margin-top: -.2rem;
+ // Generic Buttons
+ [data-c-button]:not([data-c-button="reset"]) {
+ cursor: pointer;
+ font-family: $clone-font-default;
+ font-size: $clone-default-font-size;
+ outline: none;
+ text-align: center;
transition: all .2s ease;
- vertical-align: middle;
- }
-
- img {
- display: inline-block;
- transform: translate(0, .1rem);
- width: 1rem;
- }
-
- svg {
- display: inline-block;
- transform: translate(0, .1rem);
- width: 1rem;
- }
-
- span+i,
- span+img,
- span+svg {
- margin-left: .5rem;
- }
-
- i+span,
- img+span,
- svg+span {
- margin-right: 0;
- margin-left: .5rem;
- }
+ padding: calc(#{$clone-padding} / 2);
+ i {
+ font-size: inherit;
+ line-height: 1;
+ margin-top: -.2rem;
+ transition: all .2s ease;
+ vertical-align: middle;
+ }
+ img {
+ display: inline-block;
+ transform: translate(0, .1rem);
+ width: 1rem;
+ }
+ svg {
+ display: inline-block;
+ transform: translate(0, .1rem);
+ width: 1rem;
+ }
+ span+i,
+ span+img,
+ span+svg {
+ margin-left: .5rem;
+ }
+ i+span,
+ img+span,
+ svg+span {
+ margin-right: 0;
+ margin-left: .5rem;
+ }
- // States --------------------------------------------------------------
+ // States
@media (hover: hover) {
&:hover {
background: rgba($clone-focus-color, .2);
@@ -95,42 +75,48 @@ a[data-c-button] {
color: $clone-grey;
pointer-events: none;
}
-
-}
+
+ }
-// IE 11 Hover Support
-&[id*="Trident/7.0"] {
- [data-c-button]:not([data-c-button="reset"]) {
- &:hover {
- background: rgba($clone-focus-color, .2);
- border-color: $clone-focus-color;
- color: $clone-focus-color;
- transition: all .2s ease;
- i {
+ // Anchors
+ a[data-c-button] {
+ display: inline-block;
+ max-width: 100%;
+ text-decoration: underline;
+ vertical-align: middle;
+ }
+
+ // IE 11 Hover Support
+ &[id*="Trident/7.0"] {
+ [data-c-button]:not([data-c-button="reset"]) {
+ &:hover {
+ background: rgba($clone-focus-color, .2);
+ border-color: $clone-focus-color;
color: $clone-focus-color;
transition: all .2s ease;
- }
- }
- @each $key, $value in $clone-color-map {
- &[data-c-hover-color="#{$key}"]:hover,
- &[data-c-hover-color="#{$key}"]:hover {
- background: rgba($value, .2) !important;
- border-color: $value !important;
- color: $value !important;
- transition: all .2s ease;
i {
- color: $value !important;
+ color: $clone-focus-color;
transition: all .2s ease;
}
}
- };
+ @each $key, $value in $clone-color-map {
+ &[data-c-hover-color="#{$key}"]:hover,
+ &[data-c-hover-color="#{$key}"]:hover {
+ background: rgba($value, .2) !important;
+ border-color: $value !important;
+ color: $value !important;
+ transition: all .2s ease;
+ i {
+ color: $value !important;
+ transition: all .2s ease;
+ }
+ }
+ };
+ }
}
-}
-
-// Variations ------------------------------------------------------------------
+ // Variations
$clone-button-style-list: ("solid", "outline");
-
@each $style in $clone-button-style-list {
@each $key, $value in $clone-color-map {
@if $style == "solid" {
@@ -159,6 +145,7 @@ a[data-c-button] {
}
};
+ // Reset Styles
[data-c-button="reset"] {
background: none;
border: none;
@@ -189,3 +176,5 @@ a[data-c-button] {
}
}
}
+
+}
diff --git a/app/components/buttons/buttons.html b/app/components/buttons/buttons.html
new file mode 100644
index 0000000..4226a30
--- /dev/null
+++ b/app/components/buttons/buttons.html
@@ -0,0 +1,3 @@
+
+ Button Label
+
\ No newline at end of file
diff --git a/app/components/buttons/buttons.js b/app/components/buttons/buttons.js
new file mode 100644
index 0000000..aa74255
--- /dev/null
+++ b/app/components/buttons/buttons.js
@@ -0,0 +1 @@
+// Clone / Components / Buttons
\ No newline at end of file
diff --git a/app/components/cards/_cards.scss b/app/components/cards/_cards.scss
new file mode 100644
index 0000000..a74e13d
--- /dev/null
+++ b/app/components/cards/_cards.scss
@@ -0,0 +1,10 @@
+// Clone / Components / Cards
+
+[data-clone] {
+
+ [data-c-card] {
+ background: $clone-card-background-color;
+ box-shadow: $clone-card-shadow;
+ }
+
+}
\ No newline at end of file
diff --git a/app/components/cards/cards.html b/app/components/cards/cards.html
new file mode 100644
index 0000000..0c93052
--- /dev/null
+++ b/app/components/cards/cards.html
@@ -0,0 +1,6 @@
+
+
+
+
Lorem ipsum dolor sit amet consectetur adipisicing elit. Atque, corrupti sed? Doloremque obcaecati id unde facilis. Facilis dolore id voluptatum doloribus quisquam, inventore aut et necessitatibus cumque ullam eligendi voluptatibus?
+
+
\ No newline at end of file
diff --git a/app/components/cards/cards.js b/app/components/cards/cards.js
new file mode 100644
index 0000000..00bcc2c
--- /dev/null
+++ b/app/components/cards/cards.js
@@ -0,0 +1 @@
+// Clone / Components / Cards
\ No newline at end of file
diff --git a/app/components/carousels/_carousels.scss b/app/components/carousels/_carousels.scss
new file mode 100644
index 0000000..a2f1624
--- /dev/null
+++ b/app/components/carousels/_carousels.scss
@@ -0,0 +1,95 @@
+// Clone / Components / Carousels (Glider.js)
+
+@import "glider";
+
+[data-clone] {
+
+ [data-c-carousel-wrapper] {
+ [data-c-carousel="item"],
+ [data-c-carousel-item] {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ height: auto;
+ padding-right: 10vw;
+ padding-left: 10vw;
+ }
+ [data-c-carousel-arrow] {
+ background: rgba($clone-black, .5);
+ border: none;
+ cursor: pointer;
+ display: none !important;
+ font-size: $clone-font-scale-h3;
+ height: 100%;
+ position: absolute;
+ top: 0;
+ transition: all .2s ease;
+ width: 5vw;
+ z-index: 5;
+ @media #{$clone-tablet-landscape} {
+ display: block !important;
+ }
+ i {
+ color: $clone-white;
+ font-size: inherit;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ }
+
+ // States
+ &:hover,
+ &:focus {
+ background: rgba($clone-black, .8);
+ transition: all .2s ease;
+ }
+
+ // Types
+ &[data-c-carousel-arrow="prev"] {
+ left: 0;
+ }
+ &[data-c-carousel-arrow="next"] {
+ right: 0;
+ }
+
+ }
+ [data-c-carousel-dots] {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ bottom: -1rem;
+ left: 50%;
+ transform: translate(-50%, 100%);
+ button {
+ background: $clone-carousel-dot-color;
+ border-radius: 100%;
+ display: inline-block;
+ margin: 0 .5rem;
+ transition: all .2s ease;
+ border: 0;
+ color: $clone-white;
+ cursor: pointer;
+ height: 1.5rem;
+ width: 1.5rem;
+
+ // States
+ &.active,
+ &:hover,
+ &:focus {
+ background: $clone-carousel-dot-active-color;
+ transition: all .2s ease;
+ }
+
+ }
+ }
+ }
+
+}
+
+// Content Carousels
+@import "content-carousel/content-carousel";
+
+// Image Carousels
+@import "image-carousel/image-carousel";
\ No newline at end of file
diff --git a/app/scss/core/_glider.scss b/app/components/carousels/_glider.scss
similarity index 100%
rename from app/scss/core/_glider.scss
rename to app/components/carousels/_glider.scss
diff --git a/app/components/carousels/carousels.js b/app/components/carousels/carousels.js
new file mode 100644
index 0000000..8ea3170
--- /dev/null
+++ b/app/components/carousels/carousels.js
@@ -0,0 +1,30 @@
+// Clone / Components / Carousels
+
+$(document).ready(function () {
+ window.addEventListener('load', function(){
+ var carouselID = 0;
+ $("[data-c-carousel]").each(function() {
+ if (this.hasAttribute("data-c-custom-carousel")) {
+ // Do nothing.
+ }
+ else {
+ carouselID = carouselID + 1;
+ $(this).attr("id", "carousel" + carouselID);
+ $(this).parent().find("[data-c-carousel-arrow=\"prev\"]").attr("id", "carousel" + carouselID + "prev");
+ $(this).parent().find("[data-c-carousel-arrow=\"next\"]").attr("id", "carousel" + carouselID + "next");
+ $(this).parent().find("[data-c-carousel-dots]").attr("id", "carousel" + carouselID + "dots");
+ new Glider(document.querySelector('#carousel' + carouselID), {
+ slidesToShow: 1,
+ arrows: {
+ "prev": '#carousel' + carouselID + "prev",
+ "next": '#carousel' + carouselID + "next"
+ },
+ dots: '#carousel' + carouselID + "dots",
+ draggable: true,
+ scrollLock: true,
+ rewind: true
+ })
+ }
+ });
+ });
+});
\ No newline at end of file
diff --git a/app/components/carousels/content-carousel/_content-carousel.scss b/app/components/carousels/content-carousel/_content-carousel.scss
new file mode 100644
index 0000000..c9fe935
--- /dev/null
+++ b/app/components/carousels/content-carousel/_content-carousel.scss
@@ -0,0 +1,16 @@
+// Clone / Components / Carousels (Glider.js) / Content Carousel
+
+[data-clone] {
+
+ [data-c-carousel="content"] {
+ overflow: hidden;
+ position: relative;
+ margin: 0 0 5rem 0;
+ [data-c-carousel="item"],
+ [data-c-carousel-item] {
+ background-position: center;
+ background-size: cover;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/components/carousels/content-carousel/content-carousel.html b/app/components/carousels/content-carousel/content-carousel.html
new file mode 100644
index 0000000..e923f5e
--- /dev/null
+++ b/app/components/carousels/content-carousel/content-carousel.html
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
Slide Title
+
+
Lorem ipsum, dolor sit amet consectetur adipisicing elit. Alias architecto exercitationem maiores non iure quas nulla aut nostrum? Eveniet iusto sint ab incidunt blanditiis, vitae quasi debitis illum qui repudiandae!
+
+
+
+
arrow_back_ios
+
arrow_forward_ios
+
+
\ No newline at end of file
diff --git a/app/js/glider.min.js b/app/components/carousels/glider.min.js
similarity index 100%
rename from app/js/glider.min.js
rename to app/components/carousels/glider.min.js
diff --git a/app/components/carousels/image-carousel/_image-carousel.scss b/app/components/carousels/image-carousel/_image-carousel.scss
new file mode 100644
index 0000000..491ba43
--- /dev/null
+++ b/app/components/carousels/image-carousel/_image-carousel.scss
@@ -0,0 +1,18 @@
+// Clone / Components / Carousels (Glider.js) / Image Carousel
+
+[data-clone] {
+
+ [data-c-carousel="image"] {
+ overflow: hidden;
+ position: relative;
+ margin: 0 0 5rem 0;
+ [data-c-carousel="item"],
+ [data-c-carousel-item] {
+ background-position: center;
+ background-size: cover;
+ height: 0 !important;
+ padding-top: 16.25%;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/components/carousels/image-carousel/image-carousel.html b/app/components/carousels/image-carousel/image-carousel.html
new file mode 100644
index 0000000..197a6fb
--- /dev/null
+++ b/app/components/carousels/image-carousel/image-carousel.html
@@ -0,0 +1,9 @@
+
+
+
arrow_back_ios
+
arrow_forward_ios
+
+
\ No newline at end of file
diff --git a/app/components/code-blocks/_code-blocks.scss b/app/components/code-blocks/_code-blocks.scss
new file mode 100644
index 0000000..83054cd
--- /dev/null
+++ b/app/components/code-blocks/_code-blocks.scss
@@ -0,0 +1,36 @@
+// Clone / Components / Code Blocks
+
+[data-clone] {
+
+ pre {
+ background: $clone-code-background;
+ color: contrasting-color($clone-code-background, $clone-white, $clone-black);
+ font-family: $clone-font-monospace;
+ font-size: $clone-default-font-size;
+ overflow: auto;
+ padding: 0;
+ code {
+ padding: 0;
+ * {
+ font-family: $clone-font-monospace;
+ font-size: $clone-default-font-size;
+ }
+ }
+ * {
+ font-family: $clone-font-monospace;
+ font-size: $clone-default-font-size;
+ }
+ }
+ code {
+ background: $clone-code-background;
+ color: contrasting-color($clone-code-background, $clone-white, $clone-black);
+ font-family: $clone-font-monospace;
+ font-size: inherit;
+ padding: calc(#{$clone-padding} / 6) calc(#{$clone-padding} / 3);;
+ * {
+ font-family: $clone-font-monospace;
+ font-size: $clone-default-font-size;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/components/code-blocks/code-blocks.html b/app/components/code-blocks/code-blocks.html
new file mode 100644
index 0000000..f5c98e8
--- /dev/null
+++ b/app/components/code-blocks/code-blocks.html
@@ -0,0 +1,5 @@
+
+
+ Hello World!
+
+
\ No newline at end of file
diff --git a/app/components/code-blocks/code-blocks.js b/app/components/code-blocks/code-blocks.js
new file mode 100644
index 0000000..86ce1bb
--- /dev/null
+++ b/app/components/code-blocks/code-blocks.js
@@ -0,0 +1 @@
+// Clone / Components / Code Blocks
\ No newline at end of file
diff --git a/app/components/containers/_containers.scss b/app/components/containers/_containers.scss
new file mode 100644
index 0000000..881aa79
--- /dev/null
+++ b/app/components/containers/_containers.scss
@@ -0,0 +1,92 @@
+// Clone / Components / Containers
+
+[data-clone] {
+
+ // Deprecated Syntax
+ [data-c-container="full"] {
+ margin: 0 auto;
+ width: 90%;
+ }
+
+ // Large Containers
+ [data-c-container="layout"],
+ [data-c-container="large"],
+ [data-c-container="large(center)"] {
+ margin: 0 auto;
+ max-width: $clone-large-layout;
+ width: 90%;
+ }
+ [data-c-container="large(left)"] {
+ margin: 0 auto auto 0;
+ max-width: $clone-large-layout;
+ width: 90%;
+ }
+ [data-c-container="large(right)"] {
+ margin: 0 0 auto auto;
+ max-width: $clone-large-layout;
+ width: 90%;
+ }
+
+ // Medium Containers
+ [data-c-container="form"],
+ [data-c-container="medium"],
+ [data-c-container="medium(center)"] {
+ margin: 0 auto;
+ max-width: $clone-medium-layout;
+ width: 90%;
+ }
+ [data-c-container="medium(left)"] {
+ margin: 0 auto auto 0;
+ max-width: $clone-medium-layout;
+ width: 90%;
+ }
+ [data-c-container="medium(right)"] {
+ margin: 0 0 auto auto;
+ max-width: $clone-medium-layout;
+ width: 90%;
+ }
+
+ // Small Containers
+ [data-c-container="copy"],
+ [data-c-container="small"],
+ [data-c-container="small(center)"] {
+ margin: 0 auto;
+ max-width: $clone-small-layout;
+ width: 90%;
+ }
+ [data-c-container="small(left)"] {
+ margin: 0 auto auto 0;
+ max-width: $clone-small-layout;
+ width: 90%;
+ }
+ [data-c-container="small(right)"] {
+ margin: 0 0 auto auto;
+ max-width: $clone-small-layout;
+ width: 90%;
+ }
+
+ // 3.0 Syntax
+ [data-c-container*="pp"],
+ [data-c-container*="pl"],
+ [data-c-container*="tl"],
+ [data-c-container*="tp"],
+ [data-c-container*="ds"],
+ [data-c-container*="dm"],
+ [data-c-container*="dl"] {
+ margin: 0 auto;
+ width: 90%;
+ }
+ @each $mediaKey, $mediaValue in $clone-media-query-map {
+ @media #{$mediaValue} {
+ @each $sizeKey, $sizeValue in $clone-container-size-map {
+ @each $alignmentKey, $alignmentValue in $clone-alignment-value-map {
+ [data-c-container*="#{$mediaKey}(#{$sizeKey}, #{$alignmentKey})"] {
+ margin: $alignmentValue;
+ max-width: $sizeValue;
+ }
+ }
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/components/containers/containers.html b/app/components/containers/containers.html
new file mode 100644
index 0000000..4cdc159
--- /dev/null
+++ b/app/components/containers/containers.html
@@ -0,0 +1,4 @@
+
+
+
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Fuga iste in doloremque voluptatem vitae eaque quod quae officia sunt ut! Odit earum eligendi velit, quo dicta ab cupiditate libero quod.
+
\ No newline at end of file
diff --git a/app/components/containers/containers.js b/app/components/containers/containers.js
new file mode 100644
index 0000000..dbf8271
--- /dev/null
+++ b/app/components/containers/containers.js
@@ -0,0 +1 @@
+// Clone / Components / Containers
\ No newline at end of file
diff --git a/app/components/dialogs/_dialogs.scss b/app/components/dialogs/_dialogs.scss
new file mode 100644
index 0000000..b13840a
--- /dev/null
+++ b/app/components/dialogs/_dialogs.scss
@@ -0,0 +1,119 @@
+// Clone / Components / Dialogs
+
+[data-clone] {
+
+ // Overlay
+ [data-c-dialog-overlay] {
+ background: rgba(0, 0, 0, .9);
+ height: 100vh;
+ opacity: 0;
+ position: fixed;
+ top: 0;
+ left: 0;
+ transform: translate(-100vw, 0);
+ transition: transform 0s linear .4s, opacity .2s ease .2s;
+ width: 100vw;
+ z-index: 100000000;
+ }
+
+ // States
+ [data-c-dialog-overlay*="active"] {
+ opacity: 1;
+ transform: translate(0, 0);
+ transition: transform 0s linear, opacity .2s ease;
+ }
+
+ // Dialog
+ [data-c-dialog] {
+ height: 100vh;
+ opacity: 0;
+ position: fixed;
+ transform: translate(-100vw, 0%);
+ transition: all 0s ease;
+ width: 100vw;
+ z-index: 1000000000;
+ >div {
+ margin-top: 0;
+ margin-right: auto;
+ margin-left: auto;
+ width: 90vw;
+ @media #{$clone-tablet-landscape} {
+ width: 75vw;
+ }
+ @media #{$clone-desktop-medium} {
+ width: 50vw;
+ }
+ >div:nth-child(1) {
+ position: relative;
+ [data-c-dialog-action="close"] {
+ background: none;
+ border: none;
+ border-radius: 100%;
+ cursor: pointer;
+ outline: none;
+ position: absolute;
+ top: $clone-padding;
+ right: $clone-padding;
+ transition: color .3s ease;
+ width: $clone-font-scale-h1;
+ &:after {
+ content: " ";
+ display: block;
+ padding-bottom: 100%;
+ }
+ span {
+ line-height: 1;
+ }
+ i,
+ span {
+ display: block;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ }
+ img {
+ display: block;
+ max-width: 1.5rem;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ }
+
+ // States
+ &:hover {
+ color: $clone-stop;
+ transition: color .3s ease;
+ }
+ &:focus {
+ border: solid 3px $clone-focus-color;
+ transition: border .2s ease;
+ }
+
+ }
+ }
+ }
+
+ // States
+ &[data-c-dialog="active--contained"] {
+ height: auto;
+ opacity: 1;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ transition: transform 0s linear, opacity .2s ease .2s;
+ }
+ &[data-c-dialog="active--overflowing"] {
+ height: 100vh;
+ opacity: 1;
+ overflow: auto;
+ top: 0;
+ left: 50%;
+ transform: translate(-50%, 0%);
+ transition: transform 0s linear, opacity .2s ease .2s;
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/app/components/dialogs/dialogs.js b/app/components/dialogs/dialogs.js
new file mode 100644
index 0000000..753784f
--- /dev/null
+++ b/app/components/dialogs/dialogs.js
@@ -0,0 +1,137 @@
+// Clone / Components / Dialogs
+
+// Dialog Tabindex on Pageload
+function dialogTabIndex() {
+ $("[data-c-dialog]").each(function() {
+ // $(this).find(":focusable").attr("tabindex", "-1");
+ });
+}
+
+$(document).ready(function () {
+ dialogTabIndex();
+});
+
+// Dialog Trigger
+function dialogTrigger(trigger) {
+ var dialogID = $(trigger).attr("data-c-dialog-id");
+ var dialog = $("[data-c-dialog]" + "[data-c-dialog-id='" + dialogID +"']");
+ var overlay = $("[data-c-dialog-overlay]");
+ var targetInput = $("[data-c-dialog-focus]");
+ $(targetInput).attr("tabindex", "0");
+ var focusableItems = focusable($(dialog));
+ if($(dialog).attr("data-c-dialog") != "") {
+ $("body").css("overflow", "visible");
+ $(overlay).attr("data-c-dialog-overlay", "");
+ $(dialog).attr("data-c-dialog", "");
+ $(dialog).attr("aria-hidden", "true");
+ $(focusableItems).each(function() {
+ $(this).attr("tabindex", "-1");
+ });
+ $(dialog).off('keyup');
+ document.querySelector("[data-c-dialog-ancestor]").focus();
+ }
+ else {
+ $("*").removeAttr("data-c-dialog-ancestor");
+ $(trigger).attr("data-c-dialog-ancestor", "");
+ $("body").css("overflow", "hidden");
+ $(focusableItems).each(function() {
+ $(this).attr("tabindex", "0");
+ });
+ $(overlay).attr("data-c-dialog-overlay", "active");
+ $(dialog).attr("aria-hidden", "false");
+ dialogSizing(dialog);
+ var firstInput = focusableItems.first();
+ var lastInput = focusableItems.last();
+ if (targetInput[0] != null) {
+ targetInput[0].focus();
+ }
+ dialogTabbing(firstInput, lastInput);
+ }
+}
+
+// Dialog Sizing
+function dialogSizing(dialog) {
+ var viewportHeight = $(window).height();
+ if (dialog != null) {
+ var dialogHeight = $(dialog).children("div").height() + 50;
+ if (dialogHeight > viewportHeight) {
+ $(dialog).attr("data-c-dialog", "active--overflowing");
+ }
+ else {
+ $(dialog).attr("data-c-dialog", "active--contained");
+ }
+ }
+ else {
+ $("[data-c-dialog]").each(function() {
+ if ($(this).attr("data-c-dialog") == false){
+ return false;
+ }
+ else {
+ var dialogHeight = $(this).children("div").height() + 50;
+ if (dialogHeight > viewportHeight) {
+ $(this).attr("data-c-dialog", "active--overflowing");
+ }
+ else {
+ $(this).attr("data-c-dialog", "active--contained");
+ }
+ }
+ });
+ }
+}
+
+$(document).ready(function () {
+ $(document).on("click", "button[data-c-dialog-id]", function(e) {
+ e.preventDefault();
+ dialogTrigger(this);
+ });
+ window.onresize = (function(e) {
+ e.preventDefault();
+ dialogSizing();
+ });
+});
+
+// Tab Handler
+function dialogTabbing(first, last) {
+ $(document).on("keydown", function(e){
+ var keyCode = e.keyCode || e.which;
+ if (keyCode == 9 && !e.shiftKey) {
+ if ($(last).is(":focus")) {
+ e.preventDefault();
+ first[0].focus();
+ }
+ }
+ else if (keyCode == 9 && e.shiftKey) {
+ if ($(first).is(":focus")) {
+ e.preventDefault();
+ last[0].focus();
+ }
+ }
+ });
+}
+
+// Escape Handler
+function dialogEscape(trigger) {
+ var dialogID = $(trigger).attr("data-c-dialog-id");
+ var dialog = $("[data-c-dialog]" + "[data-c-dialog-id='" + dialogID +"']");
+ if ($(dialog).hasAttr("data-c-dialog-escapable")) {
+ $(dialog).on("keyup", function(e){
+ var keyCode = e.keyCode || e.which;
+ if (keyCode == 27) {
+ $("[data-c-dialog-overlay]").attr("data-c-dialog-overlay", "");
+ $("[data-c-dialog]").each(function() {
+ $(this).attr("data-c-dialog", "");
+ });
+ $("body").css("overflow", "visible");
+ document.querySelector("[data-c-dialog-ancestor]").focus();
+ $(dialog).off('keyup');
+ }
+ });
+ }
+};
+
+$(document).ready(function () {
+ $(document).on("click", "button[data-c-dialog-id]", function(e) {
+ e.preventDefault();
+ dialogEscape(this);
+ });
+});
\ No newline at end of file
diff --git a/app/twig/components/dialog.twig b/app/components/dialogs/dialogs.twig
similarity index 53%
rename from app/twig/components/dialog.twig
rename to app/components/dialogs/dialogs.twig
index 7822c93..0c51d9a 100644
--- a/app/twig/components/dialog.twig
+++ b/app/components/dialogs/dialogs.twig
@@ -1,46 +1,45 @@
-
-
+
Open a Dialog
-
-
-
-
+
+
+
-
Dialog Title
-
-
Dialog Subtitle
+
Dialog Title
+
+
Dialog Subtitle
+
-
- x
+
+ x
-
+
Lorem ipsum dolor sit amet consectetur adipisicing elit. Autem atque ad quos placeat quidem earum corrupti? Ad, distinctio, maxime quasi illum ex consectetur necessitatibus et soluta quo sit ratione maiores.
-
-
+
\ No newline at end of file
diff --git a/app/components/flexbox-grid/_flexbox-grid.scss b/app/components/flexbox-grid/_flexbox-grid.scss
new file mode 100644
index 0000000..18644ea
--- /dev/null
+++ b/app/components/flexbox-grid/_flexbox-grid.scss
@@ -0,0 +1,429 @@
+// Clone / Components / Flexbox Grid
+
+[data-clone] {
+
+ [data-c-grid] {
+ display: flex;
+ flex-wrap: wrap;
+ }
+
+ [data-c-grid*="top"] {
+ align-items: flex-start;
+ }
+
+ [data-c-grid*="middle"] {
+ align-items: center;
+ }
+
+ [data-c-grid*="bottom"] {
+ align-items: flex-end;
+ }
+
+ [data-c-grid*="gutter"] {
+ margin: calc((#{$clone-margin} / 2) * -1);
+ @media #{$clone-tablet-portrait} {
+ margin: calc(((#{$clone-margin} / 2) * #{$clone-ws-tp}) * -1);
+ }
+ @media #{$clone-tablet-landscape} {
+ margin: calc(((#{$clone-margin} / 2) * #{$clone-ws-tl}) * -1);
+ }
+ @media #{$clone-desktop-small} {
+ margin: calc(((#{$clone-margin} / 2) * #{$clone-ws-ds}) * -1);
+ }
+ @media #{$clone-desktop-medium} {
+ margin: calc(((#{$clone-margin} / 2) * #{$clone-ws-dm}) * -1);
+ }
+ @media #{$clone-desktop-large} {
+ margin: calc(((#{$clone-margin} / 2) * #{$clone-ws-dl}) * -1);
+ }
+ >[data-c-grid-item] {
+ padding: calc(#{$clone-margin} / 2);
+ @media #{$clone-tablet-portrait} {
+ padding: calc((#{$clone-margin} / 2) * #{$clone-ws-tp});
+ }
+ @media #{$clone-tablet-landscape} {
+ padding: calc((#{$clone-margin} / 2) * #{$clone-ws-tl});
+ }
+ @media #{$clone-desktop-small} {
+ padding: calc((#{$clone-margin} / 2) * #{$clone-ws-ds});
+ }
+ @media #{$clone-desktop-medium} {
+ padding: calc((#{$clone-margin} / 2) * #{$clone-ws-dm});
+ }
+ @media #{$clone-desktop-large} {
+ padding: calc((#{$clone-margin} / 2) * #{$clone-ws-dl});
+ }
+ }
+ }
+
+ @each $wKey, $wValue in $clone-whitespace-map {
+ [data-c-grid*="#{$wKey})"] {
+ margin: calc(((#{$clone-padding} #{$wValue}) / 2) * -1);
+ @media #{$clone-tablet-portrait} {
+ margin: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tp}) * -1);
+ }
+ @media #{$clone-tablet-landscape} {
+ margin: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tl}) * -1);
+ }
+ @media #{$clone-desktop-small} {
+ margin: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-ds}) * -1);
+ }
+ @media #{$clone-desktop-medium} {
+ margin: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dm}) * -1);
+ }
+ @media #{$clone-desktop-large} {
+ margin: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dl}) * -1);
+ }
+ >[data-c-grid-item] {
+ padding: calc((#{$clone-padding} #{$wValue}) / 2);
+ @media #{$clone-tablet-portrait} {
+ padding: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tp});
+ }
+ @media #{$clone-tablet-landscape} {
+ padding: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tl});
+ }
+ @media #{$clone-desktop-small} {
+ padding: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-ds});
+ }
+ @media #{$clone-desktop-medium} {
+ padding: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dm});
+ }
+ @media #{$clone-desktop-large} {
+ padding: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dl});
+ }
+ }
+ }
+ }
+
+ $clone-grid-orientation-list: ("vertical", "horizontal");
+ @each $wKey, $wValue in $clone-whitespace-map {
+ @each $orientation in $clone-grid-orientation-list {
+ [data-c-grid*="gutter(#{$orientation}, #{$wKey})"] {
+ margin: 0;
+ >[data-c-grid-item] {
+ padding: 0;
+ }
+ @if $orientation == "vertical" {
+ margin-top: calc(((#{$clone-padding} #{$wValue}) / 2) * -1);
+ margin-bottom: calc(((#{$clone-padding} #{$wValue}) / 2) * -1);
+ @media #{$clone-tablet-portrait} {
+ margin-top: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tp}) * -1);
+ margin-bottom: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tp}) * -1);
+ }
+ @media #{$clone-tablet-landscape} {
+ margin-top: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tl}) * -1);
+ margin-bottom: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tl}) * -1);
+ }
+ @media #{$clone-desktop-small} {
+ margin-top: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-ds}) * -1);
+ margin-bottom: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-ds}) * -1);
+ }
+ @media #{$clone-desktop-medium} {
+ margin-top: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dm}) * -1);
+ margin-bottom: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dm}) * -1);
+ }
+ @media #{$clone-desktop-large} {
+ margin-top: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dl}) * -1);
+ margin-bottom: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dl}) * -1);
+ }
+ >[data-c-grid-item] {
+ padding-top: calc((#{$clone-padding} #{$wValue}) / 2);
+ padding-bottom: calc((#{$clone-padding} #{$wValue}) / 2);
+ @media #{$clone-tablet-portrait} {
+ padding-top: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tp});
+ padding-bottom: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tp});
+ }
+ @media #{$clone-tablet-landscape} {
+ padding-top: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tl});
+ padding-bottom: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tl});
+ }
+ @media #{$clone-desktop-small} {
+ padding-top: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-ds});
+ padding-bottom: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-ds});
+ }
+ @media #{$clone-desktop-medium} {
+ padding-top: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dm});
+ padding-bottom: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dm});
+ }
+ @media #{$clone-desktop-large} {
+ padding-top: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dl});
+ padding-bottom: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dl});
+ }
+ }
+ } @else {
+ margin-right: calc(((#{$clone-padding} #{$wValue}) / 2) * -1);
+ margin-left: calc(((#{$clone-padding} #{$wValue}) / 2) * -1);
+ @media #{$clone-tablet-portrait} {
+ margin-right: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tp}) * -1);
+ margin-left: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tp}) * -1);
+ }
+ @media #{$clone-tablet-landscape} {
+ margin-right: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tl}) * -1);
+ margin-left: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tl}) * -1);
+ }
+ @media #{$clone-desktop-small} {
+ margin-right: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-ds}) * -1);
+ margin-left: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-ds}) * -1);
+ }
+ @media #{$clone-desktop-medium} {
+ margin-right: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dm}) * -1);
+ margin-left: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dm}) * -1);
+ }
+ @media #{$clone-desktop-large} {
+ margin-right: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dl}) * -1);
+ margin-left: calc((((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dl}) * -1);
+ }
+ >[data-c-grid-item] {
+ padding-right: calc((#{$clone-padding} #{$wValue}) / 2);
+ padding-left: calc((#{$clone-padding} #{$wValue}) / 2);
+ @media #{$clone-tablet-portrait} {
+ padding-right: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tp});
+ padding-left: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tp});
+ }
+ @media #{$clone-tablet-landscape} {
+ padding-right: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tl});
+ padding-left: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tl});
+ }
+ @media #{$clone-desktop-small} {
+ padding-right: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-ds});
+ padding-left: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-ds});
+ }
+ @media #{$clone-desktop-medium} {
+ padding-right: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dm});
+ padding-left: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dm});
+ }
+ @media #{$clone-desktop-large} {
+ padding-right: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dl});
+ padding-left: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dl});
+ }
+ }
+ }
+ }
+ }
+ }
+
+ [data-c-grid-item] {
+ flex: 0 0 100%;
+ max-width: 100%;
+ min-width: 0;
+ }
+
+ [data-c-grid-item*="equal-col"] {
+ >div,
+ >pre,
+ >a {
+ display: block;
+ height: 100%;
+ }
+ >[data-c-grid] {
+ height: 100%;
+ }
+ }
+
+ [data-c-grid-item*="top"] {
+ align-items: flex-start;
+ }
+ [data-c-grid-item*="middle"] {
+ align-items: center;
+ }
+ [data-c-grid-item*="bottom"] {
+ align-items: flex-end;
+ }
+ [data-c-grid-item*="fit"] {
+ flex: 1;
+ }
+
+ @for $i from 1 through $clone-grid-columns {
+ @for $r from 1 through $clone-grid-columns {
+ [data-c-grid-item*="base(#{$i}of#{$r})"] {
+ flex: 0 0 calc(#{$i} / #{$r} * 100%);
+ max-width: ($i / $r * 100%);
+ }
+ }
+ }
+ @for $i from 1 through $clone-grid-columns {
+ @for $r from 1 through $clone-grid-columns {
+ @media #{$clone-phone-portrait} {
+ [data-c-grid-item*="pp(#{$i}of#{$r})"] {
+ flex: 0 0 calc(#{$i} / #{$r} * 100%);
+ max-width: ($i / $r * 100%);
+ }
+ }
+ }
+ }
+ @for $i from 1 through $clone-grid-columns {
+ @for $r from 1 through $clone-grid-columns {
+ @media #{$clone-phone-landscape} {
+ [data-c-grid-item*="pl(#{$i}of#{$r})"] {
+ flex: 0 0 calc(#{$i} / #{$r} * 100%);
+ max-width: ($i / $r * 100%);
+ }
+ }
+ }
+ }
+ @for $i from 1 through $clone-grid-columns {
+ @for $r from 1 through $clone-grid-columns {
+ @media #{$clone-tablet-portrait} {
+ [data-c-grid-item*="tp(#{$i}of#{$r})"] {
+ flex: 0 0 calc(#{$i} / #{$r} * 100%);
+ max-width: ($i / $r * 100%);
+ }
+ }
+ }
+ }
+ @for $i from 1 through $clone-grid-columns {
+ @for $r from 1 through $clone-grid-columns {
+ @media #{$clone-tablet-landscape} {
+ [data-c-grid-item*="tl(#{$i}of#{$r})"] {
+ flex: 0 0 calc(#{$i} / #{$r} * 100%);
+ max-width: ($i / $r * 100%);
+ }
+ }
+ }
+ }
+ @for $i from 1 through $clone-grid-columns {
+ @for $r from 1 through $clone-grid-columns {
+ @media #{$clone-desktop-small} {
+ [data-c-grid-item*="ds(#{$i}of#{$r})"] {
+ flex: 0 0 calc(#{$i} / #{$r} * 100%);
+ max-width: ($i / $r * 100%);
+ }
+ }
+ }
+ }
+ @for $i from 1 through $clone-grid-columns {
+ @for $r from 1 through $clone-grid-columns {
+ @media #{$clone-desktop-medium} {
+ [data-c-grid-item*="dm(#{$i}of#{$r})"] {
+ flex: 0 0 calc(#{$i} / #{$r} * 100%);
+ max-width: ($i / $r * 100%);
+ }
+ }
+ }
+ }
+ @for $i from 1 through $clone-grid-columns {
+ @for $r from 1 through $clone-grid-columns {
+ @media #{$clone-desktop-large} {
+ [data-c-grid-item*="dl(#{$i}of#{$r})"] {
+ flex: 0 0 calc(#{$i} / #{$r} * 100%);
+ max-width: ($i / $r * 100%);
+ }
+ }
+ }
+ }
+
+ // Form Elements Inside of a Flex Grid
+ [data-c-grid*="gutter"] {
+ >[data-c-input],
+ >[data-c-grid-item] >[data-c-input] {
+ >span {
+ &:first-of-type {
+ top: calc(#{$clone-padding} / 2);
+ right: calc(#{$clone-padding} / 2);
+ @media #{$clone-tablet-portrait} {
+ top: calc((#{$clone-padding} / 2) * #{$clone-ws-tp});
+ right: calc((#{$clone-padding} / 2) * #{$clone-ws-tp});
+ }
+ @media #{$clone-tablet-landscape} {
+ top: calc((#{$clone-padding} / 2) * #{$clone-ws-tl});
+ right: calc((#{$clone-padding} / 2) * #{$clone-ws-tl});
+ }
+ @media #{$clone-desktop-small} {
+ top: calc((#{$clone-padding} / 2) * #{$clone-ws-ds});
+ right: calc((#{$clone-padding} / 2) * #{$clone-ws-ds});
+ }
+ @media #{$clone-desktop-medium} {
+ top: calc((#{$clone-padding} / 2) * #{$clone-ws-dm});
+ right: calc((#{$clone-padding} / 2) * #{$clone-ws-dm});
+ }
+ @media #{$clone-desktop-large} {
+ top: calc((#{$clone-padding} / 2) * #{$clone-ws-dl});
+ right: calc((#{$clone-padding} / 2) * #{$clone-ws-dl});
+ }
+ }
+ &:last-of-type {
+ left: calc(#{$clone-padding} / 2);
+ bottom: calc(#{$clone-padding} / 2);
+ @media #{$clone-tablet-portrait} {
+ left: calc((#{$clone-padding} / 2) * #{$clone-ws-tp});
+ bottom: calc((#{$clone-padding} / 2) * #{$clone-ws-tp});
+ }
+ @media #{$clone-tablet-landscape} {
+ left: calc((#{$clone-padding} / 2) * #{$clone-ws-tl});
+ bottom: calc((#{$clone-padding} / 2) * #{$clone-ws-tl});
+ }
+ @media #{$clone-desktop-small} {
+ left: calc((#{$clone-padding} / 2) * #{$clone-ws-ds});
+ bottom: calc((#{$clone-padding} / 2) * #{$clone-ws-ds});
+ }
+ @media #{$clone-desktop-medium} {
+ left: calc((#{$clone-padding} / 2) * #{$clone-ws-dm});
+ bottom: calc((#{$clone-padding} / 2) * #{$clone-ws-dm});
+ }
+ @media #{$clone-desktop-large} {
+ left: calc((#{$clone-padding} / 2) * #{$clone-ws-dl});
+ bottom: calc((#{$clone-padding} / 2) * #{$clone-ws-dl});
+ }
+ }
+ }
+ }
+ }
+ @each $wKey, $wValue in $clone-whitespace-map {
+ [data-c-grid*="#{$wKey})"] {
+ >[data-c-input],
+ >[data-c-grid-item] >[data-c-input] {
+ >span {
+ &:first-of-type {
+ top: calc((#{$clone-padding} #{$wValue}) / 2);
+ right: calc((#{$clone-padding} #{$wValue}) / 2);
+ @media #{$clone-tablet-portrait} {
+ top: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tp});
+ right: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tp});
+ }
+ @media #{$clone-tablet-landscape} {
+ top: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tl});
+ right: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tl});
+ }
+ @media #{$clone-desktop-small} {
+ top: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-ds});
+ right: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-ds});
+ }
+ @media #{$clone-desktop-medium} {
+ top: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dm});
+ right: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dm});
+ }
+ @media #{$clone-desktop-large} {
+ top: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dl});
+ right: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dl});
+ }
+ }
+ &:last-of-type {
+ bottom: calc((#{$clone-padding} #{$wValue}) / 2);
+ left: calc((#{$clone-padding} #{$wValue}) / 2);
+ @media #{$clone-tablet-portrait} {
+ bottom: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tp});
+ left: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tp});
+ }
+ @media #{$clone-tablet-landscape} {
+ bottom: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tl});
+ left: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-tl});
+ }
+ @media #{$clone-desktop-small} {
+ bottom: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-ds});
+ left: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-ds});
+ }
+ @media #{$clone-desktop-medium} {
+ bottom: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dm});
+ left: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dm});
+ }
+ @media #{$clone-desktop-large} {
+ bottom: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dl});
+ left: calc(((#{$clone-padding} #{$wValue}) / 2) * #{$clone-ws-dl});
+ }
+ }
+ }
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/components/flexbox-grid/flexbox-grid.html b/app/components/flexbox-grid/flexbox-grid.html
new file mode 100644
index 0000000..69d3076
--- /dev/null
+++ b/app/components/flexbox-grid/flexbox-grid.html
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/app/components/flexbox-grid/flexbox-grid.js b/app/components/flexbox-grid/flexbox-grid.js
new file mode 100644
index 0000000..a917c71
--- /dev/null
+++ b/app/components/flexbox-grid/flexbox-grid.js
@@ -0,0 +1 @@
+// Clone / Components / Flexbox Grid
diff --git a/app/components/form-elements/_form-elements.scss b/app/components/form-elements/_form-elements.scss
new file mode 100644
index 0000000..c0797f7
--- /dev/null
+++ b/app/components/form-elements/_form-elements.scss
@@ -0,0 +1,134 @@
+// Clone / Components / Form Elements
+
+[data-clone] {
+
+ [data-c-input] {
+ padding: calc(#{$clone-padding} / 2) 0;
+ @media #{$clone-tablet-portrait} {
+ padding: calc((#{$clone-padding} / 2) * #{$clone-whitespace-multiplier}) 0;
+ }
+ @media #{$clone-desktop-large} {
+ padding: calc(((#{$clone-padding} / 2) * #{$clone-whitespace-multiplier}) * #{$clone-whitespace-multiplier}) 0;
+ }
+ position: relative;
+ >label {
+ display: block;
+ font-size: $clone-font-scale-small;
+ margin-bottom: .5rem;
+ padding-right: 8rem;
+ }
+ >span {
+ &:first-of-type {
+ color: $clone-alert-error;
+ display: none;
+ font-size: $clone-font-scale-small;
+ position: absolute;
+ top: calc(#{$clone-padding} / 2);
+ right: 0;
+ @media #{$clone-tablet-portrait} {
+ top: calc((#{$clone-padding} / 2) * #{$clone-whitespace-multiplier});
+ }
+ @media #{$clone-desktop-large} {
+ top: calc(((#{$clone-padding} / 2) * #{$clone-whitespace-multiplier}) * #{$clone-whitespace-multiplier});
+ }
+ }
+ &:last-of-type {
+ color: $clone-alert-error;
+ display: none;
+ font-size: $clone-font-scale-small;
+ position: absolute;
+ bottom: calc(#{$clone-padding} / 2);
+ left: 0;
+ @media #{$clone-tablet-portrait} {
+ bottom: calc((#{$clone-padding} / 2) * #{$clone-whitespace-multiplier});
+ }
+ @media #{$clone-desktop-large} {
+ bottom: calc(((#{$clone-padding} / 2) * #{$clone-whitespace-multiplier}) * #{$clone-whitespace-multiplier});
+ }
+ }
+ }
+ >div {
+ margin-bottom: 1.5rem;
+ >input {
+ border: 1px solid $clone-gray;
+ border-radius: 5px;
+ color: $clone-black;
+ display: block;
+ font-size: $clone-default-font-size;
+ outline: none;
+ transition: all .2s ease;
+ width: 100%;
+ padding: calc(#{$clone-padding} / 2);
+ @media #{$clone-tablet-portrait} {
+ padding: calc((#{$clone-padding} / 2) * #{$clone-whitespace-multiplier});
+ }
+ @media #{$clone-desktop-large} {
+ padding: calc(((#{$clone-padding} / 2) * #{$clone-whitespace-multiplier}) * #{$clone-whitespace-multiplier});
+ }
+ &:focus {
+ box-shadow: -3px -3px 0 $clone-focus-colour, 3px -3px 0 $clone-focus-colour, 3px 3px 0 $clone-focus-colour, -3px 3px 0 $clone-focus-colour;
+ transition: all .2s ease;
+ }
+ }
+ >textarea {
+ border: 1px solid $clone-gray;
+ border-radius: 5px;
+ color: $clone-black;
+ display: block;
+ font-size: $clone-default-font-size;
+ outline: none;
+ max-width: 100%;
+ min-height: 10rem;
+ min-width: 100%;
+ transition: all .2s ease;
+ width: 100%;
+ padding: calc(#{$clone-padding} / 2) #{$clone-padding};
+ @media #{$clone-tablet-portrait} {
+ padding: calc((#{$clone-padding} / 2) * #{$clone-whitespace-multiplier}) calc(#{$clone-padding} * #{$clone-whitespace-multiplier});
+ }
+ @media #{$clone-desktop-large} {
+ padding: calc(((#{$clone-padding} / 2) * #{$clone-whitespace-multiplier}) * #{$clone-whitespace-multiplier}) calc((#{$clone-padding} * #{$clone-whitespace-multiplier}) * #{$clone-whitespace-multiplier});
+ }
+ &:focus {
+ box-shadow: -3px -3px 0 $clone-focus-colour, 3px -3px 0 $clone-focus-colour, 3px 3px 0 $clone-focus-colour, -3px 3px 0 $clone-focus-colour;
+ transition: all .2s ease;
+ }
+ }
+ }
+ &[data-c-required] {
+ >span:first-of-type {
+ display: block !important;
+ }
+ }
+ &[data-c-invalid] {
+ >label {
+ color: $clone-alert-error !important;
+ }
+ >div {
+ border-color: $clone-alert-error;
+ >input,
+ >textarea,
+ >select {
+ border-color: $clone-alert-error;
+ }
+ }
+ >span:last-of-type {
+ display: block !important;
+ }
+ }
+ }
+
+}
+
+@import "checkboxes/checkboxes";
+@import "date-inputs/date-inputs";
+@import "email-inputs/email-inputs";
+@import "number-inputs/number-inputs";
+@import "password-inputs/password-inputs";
+@import "radio-inputs/radio-inputs";
+@import "select-inputs/select-inputs";
+@import "telephone-inputs/telephone-inputs";
+@import "text-inputs/text-inputs";
+@import "text-inputs-with-buttons/text-inputs-with-buttons";
+@import "textareas/textareas";
+@import "url-inputs/url-inputs";
\ No newline at end of file
diff --git a/app/components/form-elements/checkboxes/_checkboxes.scss b/app/components/form-elements/checkboxes/_checkboxes.scss
new file mode 100644
index 0000000..2c2b1b5
--- /dev/null
+++ b/app/components/form-elements/checkboxes/_checkboxes.scss
@@ -0,0 +1,7 @@
+// Clone / Components / Form Elements / Checkboxes
+
+// Single Checkboxes
+@import "single-checkbox/single-checkbox";
+
+// Multi Checkboxes
+@import "multi-checkbox/multi-checkbox";
\ No newline at end of file
diff --git a/app/components/form-elements/checkboxes/checkboxes.js b/app/components/form-elements/checkboxes/checkboxes.js
new file mode 100644
index 0000000..e69de29
diff --git a/app/components/form-elements/checkboxes/multi-checkbox/_multi-checkbox.scss b/app/components/form-elements/checkboxes/multi-checkbox/_multi-checkbox.scss
new file mode 100644
index 0000000..ad8b91d
--- /dev/null
+++ b/app/components/form-elements/checkboxes/multi-checkbox/_multi-checkbox.scss
@@ -0,0 +1,42 @@
+// Clone / Components / Form Elements / Checkboxes / Multi Checkbox
+
+[data-clone] {
+
+ [data-c-input="checkbox"],
+ [data-c-input="checkbox(group)"] {
+ >div {
+ border: 1px solid $clone-gray;
+ border-radius: 5px;
+ margin-top: .5rem;
+ padding: calc(#{$clone-padding} / 2) #{$clone-padding};
+ @media #{$clone-tablet-portrait} {
+ padding: calc((#{$clone-padding} / 2) * #{$clone-whitespace-multiplier}) calc(#{$clone-padding} * #{$clone-whitespace-multiplier});
+ }
+ @media #{$clone-desktop-large} {
+ padding: calc(((#{$clone-padding} / 2) * #{$clone-whitespace-multiplier}) * #{$clone-whitespace-multiplier}) calc((#{$clone-padding} * #{$clone-whitespace-multiplier}) * #{$clone-whitespace-multiplier});
+ }
+ label {
+ cursor: pointer;
+ display: block;
+ margin: 0 !important;
+ padding-top: .25rem !important;
+ padding-bottom: .25rem !important;
+ input {
+ display: inline-block;
+ margin-top: .4rem;
+ width: auto;
+ vertical-align: top;
+ }
+ span {
+ color: $clone-black;
+ display: inline-block;
+ font-size: $clone-default-font-size;
+ margin: 0;
+ max-width: 90%;
+ padding-left: .5rem;
+ }
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/twig/components/input/checkbox.twig b/app/components/form-elements/checkboxes/multi-checkbox/multi-checkbox.html
similarity index 100%
rename from app/twig/components/input/checkbox.twig
rename to app/components/form-elements/checkboxes/multi-checkbox/multi-checkbox.html
diff --git a/app/components/form-elements/checkboxes/single-checkbox/_single-checkbox.scss b/app/components/form-elements/checkboxes/single-checkbox/_single-checkbox.scss
new file mode 100644
index 0000000..7aff5e8
--- /dev/null
+++ b/app/components/form-elements/checkboxes/single-checkbox/_single-checkbox.scss
@@ -0,0 +1,35 @@
+// Clone / Components / Form Elements / Checkboxes / Single Checkbox
+
+[data-clone] {
+
+ [data-c-input="checkbox(single)"]{
+ align-items: center;
+ display: flex;
+ >div {
+ margin-top: 1rem;
+ width: 100%;
+ label {
+ cursor: pointer;
+ display: block;
+ margin: 0 !important;
+ padding-top: .25rem !important;
+ padding-bottom: .25rem !important;
+ input {
+ display: inline-block;
+ margin-top: .4rem;
+ width: auto;
+ vertical-align: top;
+ }
+ span {
+ color: $clone-black;
+ display: inline-block;
+ font-size: $clone-default-font-size;
+ margin: 0;
+ max-width: 90%;
+ padding-left: .5rem;
+ }
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/twig/components/input/checkbox-single.twig b/app/components/form-elements/checkboxes/single-checkbox/single-checkbox.html
similarity index 100%
rename from app/twig/components/input/checkbox-single.twig
rename to app/components/form-elements/checkboxes/single-checkbox/single-checkbox.html
diff --git a/app/components/form-elements/date-inputs/_date-inputs.scss b/app/components/form-elements/date-inputs/_date-inputs.scss
new file mode 100644
index 0000000..1d5eb98
--- /dev/null
+++ b/app/components/form-elements/date-inputs/_date-inputs.scss
@@ -0,0 +1,17 @@
+// Clone / Components / Form Elements / Date Inputs
+
+[data-clone] {
+
+ [data-c-input="date"] {
+ >div >input {
+ padding: calc((#{$clone-padding} / 2) - 1px) calc(#{$clone-padding} - 1px);
+ @media #{$clone-tablet-portrait} {
+ padding: calc(((#{$clone-padding} / 2) * #{$clone-whitespace-multiplier}) - 1px) calc((#{$clone-padding} * #{$clone-whitespace-multiplier}) - 1px);
+ }
+ @media #{$clone-desktop-large} {
+ padding: calc((((#{$clone-padding} / 2) * #{$clone-whitespace-multiplier}) * #{$clone-whitespace-multiplier}) - 1px) calc(((#{$clone-padding} * #{$clone-whitespace-multiplier}) * #{$clone-whitespace-multiplier}) - 1px);
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/twig/components/input/date.twig b/app/components/form-elements/date-inputs/date-inputs.html
similarity index 50%
rename from app/twig/components/input/date.twig
rename to app/components/form-elements/date-inputs/date-inputs.html
index 84847e5..f12991e 100644
--- a/app/twig/components/input/date.twig
+++ b/app/components/form-elements/date-inputs/date-inputs.html
@@ -1,4 +1,4 @@
-{# Note: date type fields are not supported in IE11 or Safari. This field will default to a textfield, and therefore it is important that you use the placehold to indicate to users how the date should be formatted. #}
+
Today's Date
@@ -7,4 +7,4 @@
This input has an error.
-
+
\ No newline at end of file
diff --git a/app/components/form-elements/date-inputs/date-inputs.js b/app/components/form-elements/date-inputs/date-inputs.js
new file mode 100644
index 0000000..e69de29
diff --git a/app/components/form-elements/email-inputs/_email-inputs.scss b/app/components/form-elements/email-inputs/_email-inputs.scss
new file mode 100644
index 0000000..e69de29
diff --git a/app/twig/components/input/email.twig b/app/components/form-elements/email-inputs/email-inputs.html
similarity index 97%
rename from app/twig/components/input/email.twig
rename to app/components/form-elements/email-inputs/email-inputs.html
index af1c433..b2154d0 100644
--- a/app/twig/components/input/email.twig
+++ b/app/components/form-elements/email-inputs/email-inputs.html
@@ -5,4 +5,4 @@
This input has an error.
-
+
\ No newline at end of file
diff --git a/app/components/form-elements/email-inputs/email-inputs.js b/app/components/form-elements/email-inputs/email-inputs.js
new file mode 100644
index 0000000..e69de29
diff --git a/app/components/form-elements/form-elements.js b/app/components/form-elements/form-elements.js
new file mode 100644
index 0000000..08c630b
--- /dev/null
+++ b/app/components/form-elements/form-elements.js
@@ -0,0 +1,70 @@
+// Clone / Components / Form Elements
+
+// Required Fields
+function requiredFields() {
+ $("input:required, textarea:required, select:required").each(function(e) {
+ $(this).parents("[data-c-input]").attr("data-c-required", "");
+ });
+}
+
+$(document).ready(function () {
+ requiredFields();
+});
+
+// Validation
+var inputs = $("[data-c-input]" + " input," + "[data-c-input]" + " textarea," + "[data-c-input]" + " select");
+function handlerFunction() {
+ if ($(this).is("[required]")) {
+ if ($(this).val() == "") {
+ if ($(this).attr("type") == "password") {
+ return false;
+ }
+ else {
+ $(this).parents("[data-c-input]").attr("data-c-invalid", "");
+ }
+ }
+ else {
+ if ($(this).isValid() == true) {
+ if ($(this).val() == "" || $(this).attr("type") == "password") {
+ $(this).parents("[data-c-input]").removeAttr("data-c-invalid");
+ }
+ else {
+ $(this).parents("[data-c-input]").removeAttr("data-c-invalid");
+ }
+ }
+ else {
+ if ($(this).attr("type") == "password") {
+ return false;
+ }
+ else {
+ $(this).parents("[data-c-input]").attr("data-c-invalid", "");
+ }
+ }
+ }
+ }
+ else {
+ if ($(this).isValid() == true) {
+ if ($(this).val() == "" || $(this).attr("type") == "password") {
+ $(this).parents("[data-c-input]").removeAttr("data-c-invalid");
+ }
+ else {
+ $(this).parents("[data-c-input]").removeAttr("data-c-invalid");
+ }
+ }
+ else {
+ if ($(this).attr("type") == "password") {
+ return false;
+ }
+ else {
+ $(this).parents("[data-c-input]").attr("data-c-invalid", "");
+ }
+ }
+ }
+};
+
+$(document).ready(function () {
+ var newInputs = $(inputs);
+ for (var i = 0, len = inputs.length; i < len; i++) {
+ newInputs[i].addEventListener('focusout', handlerFunction, false);
+ }
+});
\ No newline at end of file
diff --git a/app/components/form-elements/number-inputs/_number-inputs.scss b/app/components/form-elements/number-inputs/_number-inputs.scss
new file mode 100644
index 0000000..0933d4f
--- /dev/null
+++ b/app/components/form-elements/number-inputs/_number-inputs.scss
@@ -0,0 +1 @@
+// Clone / Components / Form Elements / Number Inputs
\ No newline at end of file
diff --git a/app/twig/components/input/number.twig b/app/components/form-elements/number-inputs/number-inputs.html
similarity index 97%
rename from app/twig/components/input/number.twig
rename to app/components/form-elements/number-inputs/number-inputs.html
index 71091bf..1f22d10 100644
--- a/app/twig/components/input/number.twig
+++ b/app/components/form-elements/number-inputs/number-inputs.html
@@ -5,4 +5,4 @@