"rea redux"
Bootstrap 3.0.0 Snippet by evarevirus

<link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css"> <script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script> <script src="//code.jquery.com/jquery-1.11.1.min.js"></script> <!------ Include the above in your HEAD tag ----------> <!DOCTYPE html><html class=''> <head><script src='//production-assets.codepen.io/assets/editor/live/console_runner-079c09a0e3b9ff743e39ee2d5637b9216b3545af0de366d4b9aad9dc87e26bfd.js'></script><script src='//production-assets.codepen.io/assets/editor/live/events_runner-73716630c22bbc8cff4bd0f07b135f00a0bdc5d14629260c3ec49e5606f98fdd.js'></script><script src='//production-assets.codepen.io/assets/editor/live/css_live_reload_init-2c0dc5167d60a5af3ee189d570b1835129687ea2a61bee3513dee3a50c115a77.js'></script><meta charset='UTF-8'><meta name="robots" content="noindex"><link rel="shortcut icon" type="image/x-icon" href="//production-assets.codepen.io/assets/favicon/favicon-8ea04875e70c4b0bb41da869e81236e54394d63638a1ef12fa558a4a835f1164.ico" /><link rel="mask-icon" type="" href="//production-assets.codepen.io/assets/favicon/logo-pin-f2d2b6d2c61838f7e76325261b7195c27224080bc099486ddd6dccb469b8e8e6.svg" color="#111" /><link rel="canonical" href="https://codepen.io/clindsey/pen/zNNjyj?depth=everything&order=popularity&page=2&q=redux&show_forks=false" /> <link rel='stylesheet prefetch' href='https://fonts.googleapis.com/css?family=Fira+Sans+Condensed:300,600'> <style class="cp-pen-styles">@charset "UTF-8"; /* ========================================================================== #BOX-SIZING ========================================================================== */ /** * More sensible default box-sizing: * css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice */ html { box-sizing: border-box; } *, *:before, *:after { box-sizing: inherit; } /*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */ /** * 1. Change the default font family in all browsers (opinionated). * 2. Correct the line height in all browsers. * 3. Prevent adjustments of font size after orientation changes in * IE on Windows Phone and in iOS. */ /* Document ========================================================================== */ html { font-family: sans-serif; /* 1 */ line-height: 1.15; /* 2 */ -ms-text-size-adjust: 100%; /* 3 */ -webkit-text-size-adjust: 100%; /* 3 */ } /* Sections ========================================================================== */ /** * Remove the margin in all browsers (opinionated). */ body { margin: 0; } /** * Add the correct display in IE 9-. */ article, aside, footer, header, nav, section { display: block; } /** * Correct the font size and margin on `h1` elements within `section` and * `article` contexts in Chrome, Firefox, and Safari. */ h1 { font-size: 2em; margin: 0.67em 0; } /* Grouping content ========================================================================== */ /** * Add the correct display in IE 9-. * 1. Add the correct display in IE. */ figcaption, figure, main { /* 1 */ display: block; } /** * Add the correct margin in IE 8. */ figure { margin: 1em 40px; } /** * 1. Add the correct box sizing in Firefox. * 2. Show the overflow in Edge and IE. */ hr { box-sizing: content-box; /* 1 */ height: 0; /* 1 */ overflow: visible; /* 2 */ } /** * 1. Correct the inheritance and scaling of font size in all browsers. * 2. Correct the odd `em` font sizing in all browsers. */ pre { font-family: monospace, monospace; /* 1 */ font-size: 1em; /* 2 */ } /* Text-level semantics ========================================================================== */ /** * 1. Remove the gray background on active links in IE 10. * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. */ a { background-color: transparent; /* 1 */ -webkit-text-decoration-skip: objects; /* 2 */ } /** * Remove the outline on focused links when they are also active or hovered * in all browsers (opinionated). */ a:active, a:hover { outline-width: 0; } /** * 1. Remove the bottom border in Firefox 39-. * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. */ abbr[title] { border-bottom: none; /* 1 */ text-decoration: underline; /* 2 */ text-decoration: underline dotted; /* 2 */ } /** * Prevent the duplicate application of `bolder` by the next rule in Safari 6. */ b, strong { font-weight: inherit; } /** * Add the correct font weight in Chrome, Edge, and Safari. */ b, strong { font-weight: bolder; } /** * 1. Correct the inheritance and scaling of font size in all browsers. * 2. Correct the odd `em` font sizing in all browsers. */ code, kbd, samp { font-family: monospace, monospace; /* 1 */ font-size: 1em; /* 2 */ } /** * Add the correct font style in Android 4.3-. */ dfn { font-style: italic; } /** * Add the correct background and color in IE 9-. */ mark { background-color: #ff0; color: #000; } /** * Add the correct font size in all browsers. */ small { font-size: 80%; } /** * Prevent `sub` and `sup` elements from affecting the line height in * all browsers. */ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub { bottom: -0.25em; } sup { top: -0.5em; } /* Embedded content ========================================================================== */ /** * Add the correct display in IE 9-. */ audio, video { display: inline-block; } /** * Add the correct display in iOS 4-7. */ audio:not([controls]) { display: none; height: 0; } /** * Remove the border on images inside links in IE 10-. */ img { border-style: none; } /** * Hide the overflow in IE. */ svg:not(:root) { overflow: hidden; } /* Forms ========================================================================== */ /** * 1. Change the font styles in all browsers (opinionated). * 2. Remove the margin in Firefox and Safari. */ button, input, optgroup, select, textarea { font-family: sans-serif; /* 1 */ font-size: 100%; /* 1 */ line-height: 1.15; /* 1 */ margin: 0; /* 2 */ } /** * Show the overflow in IE. * 1. Show the overflow in Edge. */ button, input { /* 1 */ overflow: visible; } /** * Remove the inheritance of text transform in Edge, Firefox, and IE. * 1. Remove the inheritance of text transform in Firefox. */ button, select { /* 1 */ text-transform: none; } /** * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` * controls in Android 4. * 2. Correct the inability to style clickable types in iOS and Safari. */ button, html [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; /* 2 */ } /** * Remove the inner border and padding in Firefox. */ button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { border-style: none; padding: 0; } /** * Restore the focus styles unset by the previous rule. */ button:-moz-focusring, [type="button"]:-moz-focusring, [type="reset"]:-moz-focusring, [type="submit"]:-moz-focusring { outline: 1px dotted ButtonText; } /** * Change the border, margin, and padding in all browsers (opinionated). */ fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } /** * 1. Correct the text wrapping in Edge and IE. * 2. Correct the color inheritance from `fieldset` elements in IE. * 3. Remove the padding so developers are not caught out when they zero out * `fieldset` elements in all browsers. */ legend { box-sizing: border-box; /* 1 */ color: inherit; /* 2 */ display: table; /* 1 */ max-width: 100%; /* 1 */ padding: 0; /* 3 */ white-space: normal; /* 1 */ } /** * 1. Add the correct display in IE 9-. * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. */ progress { display: inline-block; /* 1 */ vertical-align: baseline; /* 2 */ } /** * Remove the default vertical scrollbar in IE. */ textarea { overflow: auto; } /** * 1. Add the correct box sizing in IE 10-. * 2. Remove the padding in IE 10-. */ [type="checkbox"], [type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } /** * Correct the cursor style of increment and decrement buttons in Chrome. */ [type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; } /** * 1. Correct the odd appearance in Chrome and Safari. * 2. Correct the outline style in Safari. */ [type="search"] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */ } /** * Remove the inner padding and cancel buttons in Chrome and Safari on macOS. */ [type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } /** * 1. Correct the inability to style clickable types in iOS and Safari. * 2. Change font properties to `inherit` in Safari. */ ::-webkit-file-upload-button { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */ } /* Interactive ========================================================================== */ /* * Add the correct display in IE 9-. * 1. Add the correct display in Edge, IE, and Firefox. */ details, menu { display: block; } /* * Add the correct display in all browsers. */ summary { display: list-item; } /* Scripting ========================================================================== */ /** * Add the correct display in IE 9-. */ canvas { display: inline-block; } /** * Add the correct display in IE. */ template { display: none; } /* Hidden ========================================================================== */ /** * Add the correct display in IE 10-. */ [hidden] { display: none; } /* ========================================================================== #RESET ========================================================================== */ /** * A very simple reset that sits on top of Normalize.css. */ body, h1, h2, h3, h4, h5, h6, blockquote, p, pre, dl, dd, ol, ul, figure, hr, fieldset, legend { margin: 0; padding: 0; } /** * Remove trailing margins from nested lists. */ li > ol, li > ul { margin-bottom: 0; } /** * Remove default table spacing. */ table { border-collapse: collapse; border-spacing: 0; } /** * 1. Reset Chrome and Firefox behaviour which sets a `min-width: min-content;` * on fieldsets. */ fieldset { min-width: 0; /* [1] */ border: 0; } /* ========================================================================== #SHARED ========================================================================== */ /** * Shared declarations for certain elements. */ /** * Always declare margins in the same direction: * csswizardry.com/2012/06/single-direction-margin-declarations */ /* stylelint-disable selector-list-comma-newline-after */ address, h1, h2, h3, h4, h5, h6, blockquote, p, pre, dl, ol, ul, figure, hr, table, fieldset { margin-bottom: 24px; margin-bottom: 1.5rem; } /** * Consistent indentation for lists. */ dd, ol, ul { margin-left: 24px; margin-left: 1.5rem; } /* stylelint-enable selector-list-comma-newline-after */ /* ========================================================================== #PAGE ========================================================================== */ /** * Simple page-level setup. * * 1. Set the default `font-size` and `line-height` for the entire project, * sourced from our default variables. The `font-size` is calculated to exist * in ems, the `line-height` is calculated to exist unitlessly. * 2. Force scrollbars to always be visible to prevent awkward ‘jumps’ when * navigating between pages that do/do not have enough content to produce * scrollbars naturally. * 3. Ensure the page always fills at least the entire height of the viewport. */ html { font-size: 1em; /* [1] */ line-height: 1.5; /* [1] */ overflow-y: scroll; /* [2] */ min-height: 100%; /* [3] */ } /* ========================================================================== #HEADINGS ========================================================================== */ /** * Simple default styles for headings 1 through 6. Anything more opinionated * than simple font-size changes should likely be applied via classes (see: * https://csswizardry.com/2016/02/managing-typography-on-large-apps/). */ h1 { font-size: 36px; font-size: 2.25rem; line-height: 1.33333; } h2 { font-size: 28px; font-size: 1.75rem; line-height: 1.71429; } h3 { font-size: 24px; font-size: 1.5rem; line-height: 1; } h4 { font-size: 20px; font-size: 1.25rem; line-height: 1.2; } h5 { font-size: 18px; font-size: 1.125rem; line-height: 1.33333; } h6 { font-size: 16px; font-size: 1rem; line-height: 1.5; } /* ========================================================================== #IMAGES ========================================================================== */ /** * 1. Fluid images for responsive purposes. * 2. Offset `alt` text from surrounding copy. * 3. Setting `vertical-align` removes the whitespace that appears under `img` * elements when they are dropped into a page as-is. Safer alternative to * using `display: block;`. */ img { max-width: 100%; /* [1] */ font-style: italic; /* [2] */ vertical-align: middle; /* [3] */ } /** * 1. If a `width` and/or `height` attribute have been explicitly defined, let’s * not make the image fluid. */ img[width], img[height] { /* [1] */ max-width: none; } /* ========================================================================== #TABLES ========================================================================== */ /** * 1. Ensure tables fill up as much space as possible. */ table { width: 100%; /* [1] */ } /* ========================================================================== #WRAPPER ========================================================================== */ /** * Page-level constraining and wrapping elements. */ /* stylelint-disable */ /* stylelint-enable */ .o-wrapper { padding-right: 24px; padding-left: 24px; margin-right: auto; margin-left: auto; max-width: 1200px; } .o-wrapper:after { content: "" !important; display: block !important; clear: both !important; } /* Size variants. ========================================================================== */ .o-wrapper--tiny { padding-right: 6px; padding-left: 6px; } .o-wrapper--small { padding-right: 12px; padding-left: 12px; } .o-wrapper--large { padding-right: 48px; padding-left: 48px; } .o-wrapper--huge { padding-right: 96px; padding-left: 96px; } /* ========================================================================== #LAYOUT ========================================================================== */ /** * Grid-like layout system. * * The layout object provides us with a column-style layout system. This file * contains the basic structural elements, but classes should be complemented * with width utilities, for example: * * <div class="o-layout"> * <div class="o-layout__item u-1/2"> * </div> * <div class="o-layout__item u-1/2"> * </div> * </div> * * The above will create a two-column structure in which each column will * fluidly fill half of the width of the parent. We can have more complex * systems: * * <div class="o-layout"> * <div class="o-layout__item u-1/1 u-1/3@medium"> * </div> * <div class="o-layout__item u-1/2 u-1/3@medium"> * </div> * <div class="o-layout__item u-1/2 u-1/3@medium"> * </div> * </div> * * The above will create a system in which the first item will be 100% width * until we enter our medium breakpoint, when it will become 33.333% width. The * second and third items will be 50% of their parent, until they also become * 33.333% width at the medium breakpoint. * * We can also manipulate entire layout systems by adding a series of modifiers * to the `.o-layout` block. For example: * * <div class="o-layout o-layout--reverse"> * * This will reverse the displayed order of the system so that it runs in the * opposite order to our source, effectively flipping the system over. * * <div class="o-layout o-layout--[right|center]"> * * This will cause the system to fill up from either the centre or the right * hand side. Default behaviour is to fill up the layout system from the left. * * There are plenty more options available to us: explore them below. */ /* Default/mandatory classes. ========================================================================== */ /** * 1. Allows us to use the layout object on any type of element. * 2. We need to defensively reset any box-model properties. * 3. Use the negative margin trick for multi-row grids: * https://csswizardry.com/2011/08/building-better-grid-systems/ */ .o-layout { display: block; /* [1] */ margin: 0; /* [2] */ padding: 0; /* [2] */ list-style: none; /* [1] */ margin-left: -24px; /* [3] */ font-size: 0; } /** * 1. Required in order to combine fluid widths with fixed gutters. * 2. Allows us to manipulate grids vertically, with text-level properties, * etc. * 3. Default item alignment is with the tops of each other, like most * traditional grid/layout systems. * 4. By default, all layout items are full-width (mobile first). * 5. Gutters provided by left padding: * https://csswizardry.com/2011/08/building-better-grid-systems/ * 6. Fallback for old IEs not supporting `rem` values. */ .o-layout__item { box-sizing: border-box; /* [1] */ display: inline-block; /* [2] */ vertical-align: top; /* [3] */ width: 100%; /* [4] */ padding-left: 24px; /* [5] */ font-size: 16px; /* [6] */ font-size: 1rem; } /* Gutter size modifiers. ========================================================================== */ .o-layout--tiny { margin-left: -6px; } .o-layout--tiny > .o-layout__item { padding-left: 6px; } .o-layout--small { margin-left: -12px; } .o-layout--small > .o-layout__item { padding-left: 12px; } .o-layout--large { margin-left: -48px; } .o-layout--large > .o-layout__item { padding-left: 48px; } .o-layout--huge { margin-left: -96px; } .o-layout--huge > .o-layout__item { padding-left: 96px; } .o-layout--flush { margin-left: 0; } .o-layout--flush > .o-layout__item { padding-left: 0; } /* Vertical alignment modifiers. ========================================================================== */ /** * Align all grid items to the middles of each other. */ .o-layout--middle > .o-layout__item { vertical-align: middle; } /** * Align all grid items to the bottoms of each other. */ .o-layout--bottom > .o-layout__item { vertical-align: bottom; } /* Fill order modifiers. ========================================================================== */ /** * Fill up the layout system from the centre. */ .o-layout--center { text-align: center; } .o-layout--center > .o-layout__item { text-align: left; } /** * Fill up the layout system from the right-hand side. */ .o-layout--right { text-align: right; } .o-layout--right > .o-layout__item { text-align: left; } /** * Reverse the rendered order of the grid system. */ .o-layout--reverse { direction: rtl; } .o-layout--reverse > .o-layout__item { direction: ltr; text-align: left; } /* ========================================================================== #MEDIA ========================================================================== */ /** * Place any image- and text-like content side-by-side, as per: * http://www.stubbornella.org/content/2010/06/25/the-media-object-saves-hundreds-of-lines-of-code */ .o-media { display: block; } .o-media:after { content: "" !important; display: block !important; clear: both !important; } .o-media__img { float: left; margin-right: 24px; } .o-media__img > img { display: block; } .o-media__body { overflow: hidden; display: block; } .o-media__body, .o-media__body > :last-child { margin-bottom: 0; } /* Size variants ========================================================================== */ /** * Modify the amount of space between our image and our text. We also have * reversible options for all available sizes. */ .o-media--tiny > .o-media__img { margin-right: 6px; } .o-media--tiny.o-media--reverse > .o-media__img { margin-right: 0; margin-left: 6px; } .o-media--small > .o-media__img { margin-right: 12px; } .o-media--small.o-media--reverse > .o-media__img { margin-right: 0; margin-left: 12px; } .o-media--large > .o-media__img { margin-right: 48px; } .o-media--large.o-media--reverse > .o-media__img { margin-right: 0; margin-left: 48px; } .o-media--huge > .o-media__img { margin-right: 96px; } .o-media--huge.o-media--reverse > .o-media__img { margin-right: 0; margin-left: 96px; } /* Reversed media objects ========================================================================== */ .o-media--reverse > .o-media__img { float: right; margin-right: 0; margin-left: 24px; } /* Gutterless media objects ========================================================================== */ .o-media--flush > .o-media__img { margin-right: 0; margin-left: 0; } /* ========================================================================== #FLAG ========================================================================== */ /** * The flag object is a design pattern similar to the media object, however it * utilises `display: table[-cell];` to give us control over the vertical * alignments of the text and image. * * https://csswizardry.com/2013/05/the-flag-object/ * * 1. Allows us to control vertical alignments. * 2. Force the object to be the full width of its parent. Combined with [1], * this makes the object behave in a quasi-`display: block;` manner. */ .o-flag { display: table; /* [1] */ width: 100%; /* [2] */ } /** * Items within a flag object. There should only ever be one of each. * * 1. Default to aligning content to their middles. */ .o-flag__img, .o-flag__body { display: table-cell; vertical-align: middle; /* [1] */ } /** * Flag images have a space between them and the body of the object. * * 1. Force `.flag__img` to take up as little space as possible: * https://pixelsvsbytes.com/2012/02/this-css-layout-grid-is-no-holy-grail/ */ .o-flag__img { width: 1px; /* [1] */ padding-right: 24px; /** * 1. Fixes problem with images disappearing. */ } .o-flag__img > img { max-width: none; /* [1] */ } /** * The container for the main content of the flag object. * * 1. Forces the `.flag__body` to take up all remaining space. */ .o-flag__body { width: auto; /* [1] */ } .o-flag__body, .o-flag__body > :last-child { margin-bottom: 0; } /* Size variants. ========================================================================== */ .o-flag--tiny > .o-flag__img { padding-right: 6px; } .o-flag--tiny.o-flag--reverse > .o-flag__img { padding-right: 0; padding-left: 6px; } .o-flag--small > .o-flag__img { padding-right: 12px; } .o-flag--small.o-flag--reverse > .o-flag__img { padding-right: 0; padding-left: 12px; } .o-flag--large > .o-flag__img { padding-right: 48px; } .o-flag--large.o-flag--reverse > .o-flag__img { padding-right: 0; padding-left: 48px; } .o-flag--huge > .o-flag__img { padding-right: 96px; } .o-flag--huge.o-flag--reverse > .o-flag__img { padding-right: 0; padding-left: 96px; } .o-flag--flush > .o-flag__img { padding-right: 0; padding-left: 0; } /* Reversed flag. ========================================================================== */ /** * 1. Swap the rendered direction of the object… * 2. …and reset it. * 3. Reassign margins to the correct sides. */ .o-flag--reverse { direction: rtl; /* [1] */ } .o-flag--reverse > .o-flag__img, .o-flag--reverse > .o-flag__body { direction: ltr; /* [2] */ } .o-flag--reverse > .o-flag__img { padding-right: 0; /* [3] */ padding-left: 24px; /* [3] */ } /* Alignment variants. ========================================================================== */ /** * Vertically align the image- and body-content differently. Defaults to middle. */ .o-flag--top > .o-flag__img, .o-flag--top > .o-flag__body { vertical-align: top; } .o-flag--bottom > .o-flag__img, .o-flag--bottom > .o-flag__body { vertical-align: bottom; } /* ========================================================================== #LIST-BARE ========================================================================== */ /** * Strip list-like appearance from lists by removing their bullets, and any * indentation. */ .o-list-bare { list-style: none; margin-left: 0; } /* ========================================================================== #LIST-INLINE ========================================================================== */ /** * The list-inline object simply displays a list of items in one line. */ .o-list-inline { margin-left: 0; list-style: none; } .o-list-inline__item { display: inline-block; } /* ========================================================================== #BOX ========================================================================== */ /** * The box object simply boxes off content. Extend with cosmetic styles in the * Components layer. * * 1. So we can apply the `.o-box` class to naturally-inline elements. */ .o-box { display: block; /* [1] */ padding: 24px; } .o-box:after { content: "" !important; display: block !important; clear: both !important; } .o-box > :last-child { margin-bottom: 0; } /* Size variants ========================================================================== */ .o-box--flush { padding: 0; } .o-box--tiny { padding: 6px; } .o-box--small { padding: 12px; } .o-box--large { padding: 48px; } .o-box--huge { padding: 96px; } /* ========================================================================== #BLOCK ========================================================================== */ /** * Stacked image-with-text object. A simple abstraction to cover a very commonly * occurring design pattern. */ .o-block { display: block; text-align: center; } .o-block__img { margin-bottom: 24px; /* Size variants. ====================================================================== */ } .o-block--flush > .o-block__img { margin-bottom: 0; } .o-block--tiny > .o-block__img { margin-bottom: 6px; } .o-block--small > .o-block__img { margin-bottom: 12px; } .o-block--large > .o-block__img { margin-bottom: 48px; } .o-block--huge > .o-block__img { margin-bottom: 96px; } .o-block__body { display: block; } /* Alignment variants. ========================================================================== */ .o-block--right { text-align: right; } .o-block--left { text-align: left; } /* ========================================================================== #RATIO ========================================================================== */ /** * Create ratio-bound content blocks, to keep media (e.g. images, videos) in * their correct aspect ratios. * * http://alistapart.com/article/creating-intrinsic-ratios-for-video * * 1. Default cropping is a 1:1 ratio (i.e. a perfect square). */ .o-ratio { position: relative; display: block; overflow: hidden; } .o-ratio:before { content: ""; display: block; width: 100%; padding-bottom: 100%; /* [1] */ } .o-ratio__content, .o-ratio > iframe, .o-ratio > embed, .o-ratio > object { position: absolute; top: 0; bottom: 0; left: 0; height: 100%; width: 100%; } /* stylelint-disable */ /* Ratio variants. ========================================================================== */ /** * Generate a series of ratio classes to be used like so: * * <div class="o-ratio o-ratio--16:9"> * */ .o-ratio--2\:1:before { padding-bottom: 50%; } .o-ratio--4\:3:before { padding-bottom: 75%; } .o-ratio--16\:9:before { padding-bottom: 56.25%; } /* stylelint-enable */ /* ========================================================================== #CROP ========================================================================== */ /** * Provide a cropping container in order to display media (usually images) * cropped to certain ratios. * * 1. Set up a positioning context in which the image can sit. * 2. This is the crucial part: where the cropping happens. */ .o-crop { position: relative; /* [1] */ display: block; overflow: hidden; /* [2] */ } /** * Apply this class to the content (usually `img`) that needs cropping. * * 1. Image’s default positioning is top-left in the cropping box. * 2. Make sure the media doesn’t stop itself too soon. */ .o-crop__content { position: absolute; top: 0; /* [1] */ left: 0; /* [1] */ max-width: none; /* [2] */ } /** * We can position the media in different locations within the cropping area. */ .o-crop__content--right { right: 0; left: auto; } .o-crop__content--bottom { top: auto; bottom: 0; } .o-crop__content--center { top: 50%; left: 50%; transform: translate(-50%, -50%); } /* stylelint-disable */ /* Crop-ratio variants. ========================================================================== */ /** * Generate a series of crop classes to be used like so: * * <div class="o-crop o-crop--16:9"> * */ .o-crop--2\:1 { padding-bottom: 50%; } .o-crop--4\:3 { padding-bottom: 75%; } .o-crop--16\:9 { padding-bottom: 56.25%; } /* stylelint-enable */ /* ========================================================================== #TABLE ========================================================================== */ /** * A simple object for manipulating the structure of HTML `table`s. */ .o-table { width: 100%; } /* Equal-width table cells. ========================================================================== */ /** * `table-layout: fixed` forces all cells within a table to occupy the same * width as each other. This also has performance benefits: because the browser * does not need to (re)calculate cell dimensions based on content it discovers, * the table can be rendered very quickly. Further reading: * https://developer.mozilla.org/en-US/docs/Web/CSS/table-layout#Values */ .o-table--fixed { table-layout: fixed; } /* Size variants. ========================================================================== */ .o-table--tiny th, .o-table--tiny td { padding: 6px; } .o-table--small th, .o-table--small td { padding: 12px; } .o-table--large th, .o-table--large td { padding: 48px; } .o-table--huge th, .o-table--huge td { padding: 96px; } /* ========================================================================== #PACK ========================================================================== */ /** * The pack object simply causes any number of elements pack up horizontally to * automatically fill an equal, fluid width of their parent. * * 1. Fill all available space. * 2. Remove any leftover styling from lists. * 3. Cause children to be automatically equally sized. */ .o-pack { width: 100%; /* [1] */ margin-left: 0; /* [2] */ display: table; table-layout: fixed; /* [3] */ } /** * 1. Cause children to adopt table-like structure. * 2. Default item alignment is with the tops of each other. */ .o-pack__item { display: table-cell; /* [1] */ vertical-align: top; /* [2] */ /* Vertical alignment variants. ====================================================================== */ } .o-pack--middle > .o-pack__item { vertical-align: middle; } .o-pack--bottom > .o-pack__item { vertical-align: bottom; } /* Unequal-width items. ========================================================================== */ .o-pack--auto { table-layout: auto; } /* Size variants. ========================================================================== */ .o-pack--tiny { border-spacing: 6px; } .o-pack--small { border-spacing: 12px; } .o-pack--large { border-spacing: 48px; } .o-pack--huge { border-spacing: 96px; } /* Reversed order packs ========================================================================== */ .o-pack--reverse { direction: rtl; } .o-pack--reverse > .o-pack__item { direction: ltr; } /* ========================================================================== #CLEARFIX ========================================================================== */ /** * Attach our clearfix mixin to a utility class. */ .u-clearfix:after { content: "" !important; display: block !important; clear: both !important; } /* ========================================================================== #WIDTHS ========================================================================== */ /** * inuitcss generates a series of utility classes that give a fluid width to * whichever element they’re applied, e.g.: * * <img src="" alt="" class="u-1/2" /> * * These classes are most commonly used in conjunction with our layout system, * e.g.: * * <div class="o-layout__item u-1/2"> * * By default, inuitcss will also generate responsive variants of each of these * classes by using your Sass MQ configuration, e.g.: * * <div class="o-layout__item u-1/1 u-1/2@tablet u-1/3@desktop"> * * Optionally, inuitcss can generate offset classes which can push and pull * elements left and right by a specified amount, e.g.: * * <div class="o-layout__item u-2/3 u-pull-1/3"> * * This is useful for making very granular changes to the rendered order of * items in a layout. * * N.B. This option is turned off by default. */ /** * A series of width helper classes that you can use to size things like grid * systems. Classes take a fraction-like format (e.g. `.u-2/3`). Use these in * your markup: * * <div class="u-7/12"> * * The following will generate widths helper classes based on the fractions * defined in the `$inuit-fractions` list. */ .u-1\/1 { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/1 { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-1\/1 { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } .u-1\/2 { width: 50% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/2 { position: relative !important; right: auto !important; /* [1] */ left: 50% !important; } .u-pull-1\/2 { position: relative !important; right: 50% !important; left: auto !important; /* [1] */ } .u-2\/2 { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-2\/2 { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-2\/2 { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } .u-1\/3 { width: 33.33333% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/3 { position: relative !important; right: auto !important; /* [1] */ left: 33.33333% !important; } .u-pull-1\/3 { position: relative !important; right: 33.33333% !important; left: auto !important; /* [1] */ } .u-2\/3 { width: 66.66667% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-2\/3 { position: relative !important; right: auto !important; /* [1] */ left: 66.66667% !important; } .u-pull-2\/3 { position: relative !important; right: 66.66667% !important; left: auto !important; /* [1] */ } .u-3\/3 { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-3\/3 { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-3\/3 { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } .u-1\/4 { width: 25% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/4 { position: relative !important; right: auto !important; /* [1] */ left: 25% !important; } .u-pull-1\/4 { position: relative !important; right: 25% !important; left: auto !important; /* [1] */ } .u-2\/4 { width: 50% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-2\/4 { position: relative !important; right: auto !important; /* [1] */ left: 50% !important; } .u-pull-2\/4 { position: relative !important; right: 50% !important; left: auto !important; /* [1] */ } .u-3\/4 { width: 75% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-3\/4 { position: relative !important; right: auto !important; /* [1] */ left: 75% !important; } .u-pull-3\/4 { position: relative !important; right: 75% !important; left: auto !important; /* [1] */ } .u-4\/4 { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-4\/4 { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-4\/4 { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } .u-1\/5 { width: 20% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/5 { position: relative !important; right: auto !important; /* [1] */ left: 20% !important; } .u-pull-1\/5 { position: relative !important; right: 20% !important; left: auto !important; /* [1] */ } .u-2\/5 { width: 40% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-2\/5 { position: relative !important; right: auto !important; /* [1] */ left: 40% !important; } .u-pull-2\/5 { position: relative !important; right: 40% !important; left: auto !important; /* [1] */ } .u-3\/5 { width: 60% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-3\/5 { position: relative !important; right: auto !important; /* [1] */ left: 60% !important; } .u-pull-3\/5 { position: relative !important; right: 60% !important; left: auto !important; /* [1] */ } .u-4\/5 { width: 80% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-4\/5 { position: relative !important; right: auto !important; /* [1] */ left: 80% !important; } .u-pull-4\/5 { position: relative !important; right: 80% !important; left: auto !important; /* [1] */ } .u-5\/5 { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-5\/5 { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-5\/5 { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } /** * If we’re using Sass-MQ, automatically generate grid system(s) for each of our * defined breakpoints, and give them a Responsive Suffix, e.g.: * * <div class="u-3/12@mobile"> */ @media (min-width: 20em) { .u-1\/1\@mobile { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/1\@mobile { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-1\/1\@mobile { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } .u-1\/2\@mobile { width: 50% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/2\@mobile { position: relative !important; right: auto !important; /* [1] */ left: 50% !important; } .u-pull-1\/2\@mobile { position: relative !important; right: 50% !important; left: auto !important; /* [1] */ } .u-2\/2\@mobile { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-2\/2\@mobile { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-2\/2\@mobile { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } .u-1\/3\@mobile { width: 33.33333% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/3\@mobile { position: relative !important; right: auto !important; /* [1] */ left: 33.33333% !important; } .u-pull-1\/3\@mobile { position: relative !important; right: 33.33333% !important; left: auto !important; /* [1] */ } .u-2\/3\@mobile { width: 66.66667% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-2\/3\@mobile { position: relative !important; right: auto !important; /* [1] */ left: 66.66667% !important; } .u-pull-2\/3\@mobile { position: relative !important; right: 66.66667% !important; left: auto !important; /* [1] */ } .u-3\/3\@mobile { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-3\/3\@mobile { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-3\/3\@mobile { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } .u-1\/4\@mobile { width: 25% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/4\@mobile { position: relative !important; right: auto !important; /* [1] */ left: 25% !important; } .u-pull-1\/4\@mobile { position: relative !important; right: 25% !important; left: auto !important; /* [1] */ } .u-2\/4\@mobile { width: 50% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-2\/4\@mobile { position: relative !important; right: auto !important; /* [1] */ left: 50% !important; } .u-pull-2\/4\@mobile { position: relative !important; right: 50% !important; left: auto !important; /* [1] */ } .u-3\/4\@mobile { width: 75% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-3\/4\@mobile { position: relative !important; right: auto !important; /* [1] */ left: 75% !important; } .u-pull-3\/4\@mobile { position: relative !important; right: 75% !important; left: auto !important; /* [1] */ } .u-4\/4\@mobile { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-4\/4\@mobile { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-4\/4\@mobile { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } .u-1\/5\@mobile { width: 20% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/5\@mobile { position: relative !important; right: auto !important; /* [1] */ left: 20% !important; } .u-pull-1\/5\@mobile { position: relative !important; right: 20% !important; left: auto !important; /* [1] */ } .u-2\/5\@mobile { width: 40% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-2\/5\@mobile { position: relative !important; right: auto !important; /* [1] */ left: 40% !important; } .u-pull-2\/5\@mobile { position: relative !important; right: 40% !important; left: auto !important; /* [1] */ } .u-3\/5\@mobile { width: 60% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-3\/5\@mobile { position: relative !important; right: auto !important; /* [1] */ left: 60% !important; } .u-pull-3\/5\@mobile { position: relative !important; right: 60% !important; left: auto !important; /* [1] */ } .u-4\/5\@mobile { width: 80% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-4\/5\@mobile { position: relative !important; right: auto !important; /* [1] */ left: 80% !important; } .u-pull-4\/5\@mobile { position: relative !important; right: 80% !important; left: auto !important; /* [1] */ } .u-5\/5\@mobile { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-5\/5\@mobile { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-5\/5\@mobile { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } } @media (min-width: 46.25em) { .u-1\/1\@tablet { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/1\@tablet { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-1\/1\@tablet { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } .u-1\/2\@tablet { width: 50% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/2\@tablet { position: relative !important; right: auto !important; /* [1] */ left: 50% !important; } .u-pull-1\/2\@tablet { position: relative !important; right: 50% !important; left: auto !important; /* [1] */ } .u-2\/2\@tablet { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-2\/2\@tablet { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-2\/2\@tablet { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } .u-1\/3\@tablet { width: 33.33333% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/3\@tablet { position: relative !important; right: auto !important; /* [1] */ left: 33.33333% !important; } .u-pull-1\/3\@tablet { position: relative !important; right: 33.33333% !important; left: auto !important; /* [1] */ } .u-2\/3\@tablet { width: 66.66667% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-2\/3\@tablet { position: relative !important; right: auto !important; /* [1] */ left: 66.66667% !important; } .u-pull-2\/3\@tablet { position: relative !important; right: 66.66667% !important; left: auto !important; /* [1] */ } .u-3\/3\@tablet { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-3\/3\@tablet { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-3\/3\@tablet { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } .u-1\/4\@tablet { width: 25% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/4\@tablet { position: relative !important; right: auto !important; /* [1] */ left: 25% !important; } .u-pull-1\/4\@tablet { position: relative !important; right: 25% !important; left: auto !important; /* [1] */ } .u-2\/4\@tablet { width: 50% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-2\/4\@tablet { position: relative !important; right: auto !important; /* [1] */ left: 50% !important; } .u-pull-2\/4\@tablet { position: relative !important; right: 50% !important; left: auto !important; /* [1] */ } .u-3\/4\@tablet { width: 75% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-3\/4\@tablet { position: relative !important; right: auto !important; /* [1] */ left: 75% !important; } .u-pull-3\/4\@tablet { position: relative !important; right: 75% !important; left: auto !important; /* [1] */ } .u-4\/4\@tablet { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-4\/4\@tablet { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-4\/4\@tablet { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } .u-1\/5\@tablet { width: 20% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/5\@tablet { position: relative !important; right: auto !important; /* [1] */ left: 20% !important; } .u-pull-1\/5\@tablet { position: relative !important; right: 20% !important; left: auto !important; /* [1] */ } .u-2\/5\@tablet { width: 40% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-2\/5\@tablet { position: relative !important; right: auto !important; /* [1] */ left: 40% !important; } .u-pull-2\/5\@tablet { position: relative !important; right: 40% !important; left: auto !important; /* [1] */ } .u-3\/5\@tablet { width: 60% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-3\/5\@tablet { position: relative !important; right: auto !important; /* [1] */ left: 60% !important; } .u-pull-3\/5\@tablet { position: relative !important; right: 60% !important; left: auto !important; /* [1] */ } .u-4\/5\@tablet { width: 80% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-4\/5\@tablet { position: relative !important; right: auto !important; /* [1] */ left: 80% !important; } .u-pull-4\/5\@tablet { position: relative !important; right: 80% !important; left: auto !important; /* [1] */ } .u-5\/5\@tablet { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-5\/5\@tablet { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-5\/5\@tablet { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } } @media (min-width: 61.25em) { .u-1\/1\@desktop { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/1\@desktop { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-1\/1\@desktop { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } .u-1\/2\@desktop { width: 50% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/2\@desktop { position: relative !important; right: auto !important; /* [1] */ left: 50% !important; } .u-pull-1\/2\@desktop { position: relative !important; right: 50% !important; left: auto !important; /* [1] */ } .u-2\/2\@desktop { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-2\/2\@desktop { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-2\/2\@desktop { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } .u-1\/3\@desktop { width: 33.33333% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/3\@desktop { position: relative !important; right: auto !important; /* [1] */ left: 33.33333% !important; } .u-pull-1\/3\@desktop { position: relative !important; right: 33.33333% !important; left: auto !important; /* [1] */ } .u-2\/3\@desktop { width: 66.66667% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-2\/3\@desktop { position: relative !important; right: auto !important; /* [1] */ left: 66.66667% !important; } .u-pull-2\/3\@desktop { position: relative !important; right: 66.66667% !important; left: auto !important; /* [1] */ } .u-3\/3\@desktop { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-3\/3\@desktop { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-3\/3\@desktop { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } .u-1\/4\@desktop { width: 25% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/4\@desktop { position: relative !important; right: auto !important; /* [1] */ left: 25% !important; } .u-pull-1\/4\@desktop { position: relative !important; right: 25% !important; left: auto !important; /* [1] */ } .u-2\/4\@desktop { width: 50% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-2\/4\@desktop { position: relative !important; right: auto !important; /* [1] */ left: 50% !important; } .u-pull-2\/4\@desktop { position: relative !important; right: 50% !important; left: auto !important; /* [1] */ } .u-3\/4\@desktop { width: 75% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-3\/4\@desktop { position: relative !important; right: auto !important; /* [1] */ left: 75% !important; } .u-pull-3\/4\@desktop { position: relative !important; right: 75% !important; left: auto !important; /* [1] */ } .u-4\/4\@desktop { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-4\/4\@desktop { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-4\/4\@desktop { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } .u-1\/5\@desktop { width: 20% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/5\@desktop { position: relative !important; right: auto !important; /* [1] */ left: 20% !important; } .u-pull-1\/5\@desktop { position: relative !important; right: 20% !important; left: auto !important; /* [1] */ } .u-2\/5\@desktop { width: 40% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-2\/5\@desktop { position: relative !important; right: auto !important; /* [1] */ left: 40% !important; } .u-pull-2\/5\@desktop { position: relative !important; right: 40% !important; left: auto !important; /* [1] */ } .u-3\/5\@desktop { width: 60% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-3\/5\@desktop { position: relative !important; right: auto !important; /* [1] */ left: 60% !important; } .u-pull-3\/5\@desktop { position: relative !important; right: 60% !important; left: auto !important; /* [1] */ } .u-4\/5\@desktop { width: 80% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-4\/5\@desktop { position: relative !important; right: auto !important; /* [1] */ left: 80% !important; } .u-pull-4\/5\@desktop { position: relative !important; right: 80% !important; left: auto !important; /* [1] */ } .u-5\/5\@desktop { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-5\/5\@desktop { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-5\/5\@desktop { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } } @media (min-width: 81.25em) { .u-1\/1\@wide { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/1\@wide { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-1\/1\@wide { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } .u-1\/2\@wide { width: 50% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/2\@wide { position: relative !important; right: auto !important; /* [1] */ left: 50% !important; } .u-pull-1\/2\@wide { position: relative !important; right: 50% !important; left: auto !important; /* [1] */ } .u-2\/2\@wide { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-2\/2\@wide { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-2\/2\@wide { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } .u-1\/3\@wide { width: 33.33333% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/3\@wide { position: relative !important; right: auto !important; /* [1] */ left: 33.33333% !important; } .u-pull-1\/3\@wide { position: relative !important; right: 33.33333% !important; left: auto !important; /* [1] */ } .u-2\/3\@wide { width: 66.66667% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-2\/3\@wide { position: relative !important; right: auto !important; /* [1] */ left: 66.66667% !important; } .u-pull-2\/3\@wide { position: relative !important; right: 66.66667% !important; left: auto !important; /* [1] */ } .u-3\/3\@wide { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-3\/3\@wide { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-3\/3\@wide { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } .u-1\/4\@wide { width: 25% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/4\@wide { position: relative !important; right: auto !important; /* [1] */ left: 25% !important; } .u-pull-1\/4\@wide { position: relative !important; right: 25% !important; left: auto !important; /* [1] */ } .u-2\/4\@wide { width: 50% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-2\/4\@wide { position: relative !important; right: auto !important; /* [1] */ left: 50% !important; } .u-pull-2\/4\@wide { position: relative !important; right: 50% !important; left: auto !important; /* [1] */ } .u-3\/4\@wide { width: 75% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-3\/4\@wide { position: relative !important; right: auto !important; /* [1] */ left: 75% !important; } .u-pull-3\/4\@wide { position: relative !important; right: 75% !important; left: auto !important; /* [1] */ } .u-4\/4\@wide { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-4\/4\@wide { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-4\/4\@wide { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } .u-1\/5\@wide { width: 20% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-1\/5\@wide { position: relative !important; right: auto !important; /* [1] */ left: 20% !important; } .u-pull-1\/5\@wide { position: relative !important; right: 20% !important; left: auto !important; /* [1] */ } .u-2\/5\@wide { width: 40% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-2\/5\@wide { position: relative !important; right: auto !important; /* [1] */ left: 40% !important; } .u-pull-2\/5\@wide { position: relative !important; right: 40% !important; left: auto !important; /* [1] */ } .u-3\/5\@wide { width: 60% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-3\/5\@wide { position: relative !important; right: auto !important; /* [1] */ left: 60% !important; } .u-pull-3\/5\@wide { position: relative !important; right: 60% !important; left: auto !important; /* [1] */ } .u-4\/5\@wide { width: 80% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-4\/5\@wide { position: relative !important; right: auto !important; /* [1] */ left: 80% !important; } .u-pull-4\/5\@wide { position: relative !important; right: 80% !important; left: auto !important; /* [1] */ } .u-5\/5\@wide { width: 100% !important; } /** * 1. Reset any leftover or conflicting `left`/`right` values. */ .u-push-5\/5\@wide { position: relative !important; right: auto !important; /* [1] */ left: 100% !important; } .u-pull-5\/5\@wide { position: relative !important; right: 100% !important; left: auto !important; /* [1] */ } } /* ========================================================================== #HEADINGS ========================================================================== */ /** * Redefine all of our basic heading styles against utility classes so as to * allow for double stranded heading hierarchy, e.g. we semantically need an H2, * but we want it to be sized like an H1: * * <h2 class="u-h1"></h2> * */ .u-h1 { font-size: 36px !important; font-size: 2.25rem !important; line-height: 1.33333 !important; } .u-h2 { font-size: 28px !important; font-size: 1.75rem !important; line-height: 1.71429 !important; } .u-h3 { font-size: 24px !important; font-size: 1.5rem !important; line-height: 1 !important; } .u-h4 { font-size: 20px !important; font-size: 1.25rem !important; line-height: 1.2 !important; } .u-h5 { font-size: 18px !important; font-size: 1.125rem !important; line-height: 1.33333 !important; } .u-h6 { font-size: 16px !important; font-size: 1rem !important; line-height: 1.5 !important; } /* ========================================================================== #SPACING ========================================================================== */ /** * Utility classes to put specific spacing values onto elements. The below loop * will generate us a suite of classes like: * * .u-margin-top {} * .u-padding-left-large {} * .u-margin-right-small {} * .u-padding {} * .u-padding-right-none {} * .u-padding-horizontal {} * .u-padding-vertical-small {} */ /* stylelint-disable string-quotes */ .u-padding { padding: 24px !important; } .u-padding-tiny { padding: 6px !important; } .u-padding-small { padding: 12px !important; } .u-padding-large { padding: 48px !important; } .u-padding-huge { padding: 96px !important; } .u-padding-none { padding: 0 !important; } .u-padding-top { padding-top: 24px !important; } .u-padding-top-tiny { padding-top: 6px !important; } .u-padding-top-small { padding-top: 12px !important; } .u-padding-top-large { padding-top: 48px !important; } .u-padding-top-huge { padding-top: 96px !important; } .u-padding-top-none { padding-top: 0 !important; } .u-padding-right { padding-right: 24px !important; } .u-padding-right-tiny { padding-right: 6px !important; } .u-padding-right-small { padding-right: 12px !important; } .u-padding-right-large { padding-right: 48px !important; } .u-padding-right-huge { padding-right: 96px !important; } .u-padding-right-none { padding-right: 0 !important; } .u-padding-bottom { padding-bottom: 24px !important; } .u-padding-bottom-tiny { padding-bottom: 6px !important; } .u-padding-bottom-small { padding-bottom: 12px !important; } .u-padding-bottom-large { padding-bottom: 48px !important; } .u-padding-bottom-huge { padding-bottom: 96px !important; } .u-padding-bottom-none { padding-bottom: 0 !important; } .u-padding-left { padding-left: 24px !important; } .u-padding-left-tiny { padding-left: 6px !important; } .u-padding-left-small { padding-left: 12px !important; } .u-padding-left-large { padding-left: 48px !important; } .u-padding-left-huge { padding-left: 96px !important; } .u-padding-left-none { padding-left: 0 !important; } .u-padding-horizontal { padding-left: 24px !important; padding-right: 24px !important; } .u-padding-horizontal-tiny { padding-left: 6px !important; padding-right: 6px !important; } .u-padding-horizontal-small { padding-left: 12px !important; padding-right: 12px !important; } .u-padding-horizontal-large { padding-left: 48px !important; padding-right: 48px !important; } .u-padding-horizontal-huge { padding-left: 96px !important; padding-right: 96px !important; } .u-padding-horizontal-none { padding-left: 0 !important; padding-right: 0 !important; } .u-padding-vertical { padding-top: 24px !important; padding-bottom: 24px !important; } .u-padding-vertical-tiny { padding-top: 6px !important; padding-bottom: 6px !important; } .u-padding-vertical-small { padding-top: 12px !important; padding-bottom: 12px !important; } .u-padding-vertical-large { padding-top: 48px !important; padding-bottom: 48px !important; } .u-padding-vertical-huge { padding-top: 96px !important; padding-bottom: 96px !important; } .u-padding-vertical-none { padding-top: 0 !important; padding-bottom: 0 !important; } .u-margin { margin: 24px !important; } .u-margin-tiny { margin: 6px !important; } .u-margin-small { margin: 12px !important; } .u-margin-large { margin: 48px !important; } .u-margin-huge { margin: 96px !important; } .u-margin-none { margin: 0 !important; } .u-margin-top { margin-top: 24px !important; } .u-margin-top-tiny { margin-top: 6px !important; } .u-margin-top-small { margin-top: 12px !important; } .u-margin-top-large { margin-top: 48px !important; } .u-margin-top-huge { margin-top: 96px !important; } .u-margin-top-none { margin-top: 0 !important; } .u-margin-right { margin-right: 24px !important; } .u-margin-right-tiny { margin-right: 6px !important; } .u-margin-right-small { margin-right: 12px !important; } .u-margin-right-large { margin-right: 48px !important; } .u-margin-right-huge { margin-right: 96px !important; } .u-margin-right-none { margin-right: 0 !important; } .u-margin-bottom { margin-bottom: 24px !important; } .u-margin-bottom-tiny { margin-bottom: 6px !important; } .u-margin-bottom-small { margin-bottom: 12px !important; } .u-margin-bottom-large { margin-bottom: 48px !important; } .u-margin-bottom-huge { margin-bottom: 96px !important; } .u-margin-bottom-none { margin-bottom: 0 !important; } .u-margin-left { margin-left: 24px !important; } .u-margin-left-tiny { margin-left: 6px !important; } .u-margin-left-small { margin-left: 12px !important; } .u-margin-left-large { margin-left: 48px !important; } .u-margin-left-huge { margin-left: 96px !important; } .u-margin-left-none { margin-left: 0 !important; } .u-margin-horizontal { margin-left: 24px !important; margin-right: 24px !important; } .u-margin-horizontal-tiny { margin-left: 6px !important; margin-right: 6px !important; } .u-margin-horizontal-small { margin-left: 12px !important; margin-right: 12px !important; } .u-margin-horizontal-large { margin-left: 48px !important; margin-right: 48px !important; } .u-margin-horizontal-huge { margin-left: 96px !important; margin-right: 96px !important; } .u-margin-horizontal-none { margin-left: 0 !important; margin-right: 0 !important; } .u-margin-vertical { margin-top: 24px !important; margin-bottom: 24px !important; } .u-margin-vertical-tiny { margin-top: 6px !important; margin-bottom: 6px !important; } .u-margin-vertical-small { margin-top: 12px !important; margin-bottom: 12px !important; } .u-margin-vertical-large { margin-top: 48px !important; margin-bottom: 48px !important; } .u-margin-vertical-huge { margin-top: 96px !important; margin-bottom: 96px !important; } .u-margin-vertical-none { margin-top: 0 !important; margin-bottom: 0 !important; } /* stylelint-enable string-quotes */ /* ========================================================================== #PRINT ========================================================================== */ /** * Very crude, reset-like styles taken from the HTML5 Boilerplate: * https://github.com/h5bp/html5-boilerplate/blob/5.3.0/dist/doc/css.md#print-styles * https://github.com/h5bp/html5-boilerplate/blob/master/dist/css/main.css#L205-L282 */ @media print { /** * 1. Black prints faster: http://www.sanbeiji.com/archives/953 */ *, *:before, *:after, *:first-letter, *:first-line { background: transparent !important; color: #000 !important; /* [1] */ box-shadow: none !important; text-shadow: none !important; } a, a:visited { text-decoration: underline; } a[href]:after { content: " (" attr(href) ")"; } abbr[title]:after { content: " (" attr(title) ")"; } /** * Don't show links that are fragment identifiers, or use the `javascript:` * pseudo protocol. */ a[href^="#"]:after, a[href^="javascript:"]:after { content: ""; } pre, blockquote { border: 1px solid #999; page-break-inside: avoid; } /** * Printing Tables: http://css-discuss.incutio.com/wiki/Printing_Tables */ thead { display: table-header-group; } tr, img { page-break-inside: avoid; } img { max-width: 100% !important; } p, h2, h3 { orphans: 3; widows: 3; } h2, h3 { page-break-after: avoid; } } /* ========================================================================== #HIDE ========================================================================== */ /** * Hide only visually, but have it available for screen readers: * http://snook.ca/archives/html_and_css/hiding-content-for-accessibility */ .u-hidden-visually { border: 0 !important; clip: rect(0 0 0 0) !important; clip-path: inset(50%) !important; height: 1px !important; margin: -1px !important; overflow: hidden !important; padding: 0 !important; position: absolute !important; white-space: nowrap !important; width: 1px !important; } /** * Hide visually and from screen readers. */ .u-hidden { display: none !important; } /* * FORMBUTTON * HEADERS * INPUTCONTROL * RADIOCONTROL * TYPOGRAPHY */ html { color: #4a4a4a; font-family: 'Fira Sans Condensed', sans-serif; font-size: 14px; } @media (min-width: 46.25em) { html { font-size: 16px; } } body { margin-top: 24px; margin-bottom: 24px; } dt { font-weight: 600; } .u-center-text { text-align: center; } .u-capitalize-text { text-transform: capitalize; } .c-hr { border: 0; height: 1px; background-color: #9b9b9b; } .c-h1 { font-size: 2rem; } .c-h2 { font-size: 1.5rem; font-weight: 600; } .c-h3 { font-size: 1.25rem; } .c-h4 { font-size: 0.875rem; font-weight: 600; text-transform: uppercase; } .c-h5 { font-size: 0.9375rem; font-weight: 600; } .c-text-strong { color: #0698bd; } .c-text-strong--inverse { color: #fff; } .c-text-strong--stronger { font-weight: 600; color: #4a4a4a; } .c-text-strong--super-strong { font-weight: 600; font-size: 1.25rem; } .c-text-small { font-size: 0.875rem; } .c-text-small--muted { color: #9b9b9b; } .c-text-small--strong { color: #0698bd; } .c-text-small--stronger { font-weight: 600; } .c-form-button { border: solid 1px #fff; border-radius: 6px; color: #fff; cursor: pointer; display: inline-block; font: inherit; font-weight: 600; margin: 12px 0; padding: 6px 24px; text-align: center; vertical-align: middle; text-decoration: none; } .c-form-button--primary { background-color: #337ab7; border-color: #337ab7; } .c-form-button--primary.c-form-button--disabled, .c-form-button--primary:disabled { background-color: #5094ce; border-color: #5094ce; } .c-form-button--primary.c-form-button--inverse { background-color: #fff; color: #337ab7; border-color: #337ab7; } .c-form-button--block { width: 100%; } .c-form-button--destructive { background-color: #d9534f; border-color: #d9534f; } .c-input-control__input { -webkit-backface-visibility: hidden; border: none; border-bottom: solid 1px #e0e0e0; color: #4a4a4a; font-family: inherit; font-weight: 300; margin-bottom: 24px; padding: 0; width: 100%; } .c-input-control__hint { color: #d9534f; margin-top: -24px; min-height: 24px; } .c-input-control--error .c-input-control__input { border-bottom: solid 1px #d9534f; } .c-radio-control__label { border-radius: 6px; border: solid 1px #e0e0e0; color: #9b9b9b; cursor: pointer; display: block; margin: 0 auto; overflow-x: hidden; padding: 6px; text-overflow: ellipsis; white-space: nowrap; width: 100%; } .c-radio-control__item { margin-bottom: 6px; text-align: center; } .c-radio-control__field:checked + label { border-color: #337ab7; color: #337ab7; } .c-radio-control--error .c-radio-control__hint { color: #d9534f; } .c-radio-control__hint { min-height: 24px; margin-top: -6px; } </style></head><body> <div id="js-app"></div> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.3.2/react.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.3.2/react-dom.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/redux/3.5.2/redux.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-redux/4.4.5/react-redux.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/redux-form/6.4.3/redux-form.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/classnames/2.2.5/dedupe.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <!-- this is just for the credit card validation library, not sure why it even needs jQuery --> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.payment/3.0.0/jquery.payment.js"></script> <script src='//production-assets.codepen.io/assets/common/stopExecutionOnTimeout-b2a7b3fe212eaa732349046d8416e00a9dec26eb7fd347590fbced3ab38af52e.js'></script> <script >'use strict'; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) {if (window.CP.shouldStopExecution(2)){break;} var source = arguments[i]; for (var key in source) {if (window.CP.shouldStopExecution(1)){break;} if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } window.CP.exitedLoop(1); } window.CP.exitedLoop(2); return target; }; var _class, _temp, _class2, _temp2, _class3, _temp3, _class4, _temp4; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* * REDUCERS * ACTIONS * CONTAINERS * COMPONENTS * FORMS * SECTIONS * CONTROLS * VALIDATORS * UTILITIES */ var _ReactRedux = ReactRedux; var Provider = _ReactRedux.Provider; var _ReduxForm = ReduxForm; var Field = _ReduxForm.Field; var FormSection = _ReduxForm.FormSection; var reduxForm = _ReduxForm.reduxForm; setTimeout(function () { var store = configureStore({}); ReactDOM.render(React.createElement( Provider, { store: store }, React.createElement(AppContainer, null) ), document.getElementById('js-app')); }, 0); function configureStore(initialState) { var reducers = Redux.combineReducers({ shipments: shipmentsReducer, form: ReduxForm.reducer // this is how redux-form gets into the reducers }); return Redux.createStore(reducers, initialState); } // BEGIN REDUCERS function shipmentsReducer() { var state = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0]; var action = arguments[1]; if (action.type === 'SHIPMENT_ADD') { return [].concat(state, [action.shipment]); } return state; } // END REDUCERS // BEGIN ACTIONS var shipmentActions = { add: function add(shipment) { return { type: 'SHIPMENT_ADD', shipment: shipment }; } }; // END ACTIONS // BEGIN CONTAINERS var AppComponent = (_temp = _class = function (_React$Component) { _inherits(AppComponent, _React$Component); function AppComponent(props) { _classCallCheck(this, AppComponent); var _this = _possibleConstructorReturn(this, _React$Component.call(this, props)); _this.handleSubmit = _this.onSubmit(); return _this; } AppComponent.prototype.onSubmit = function onSubmit() { var _this2 = this; return function (values) { _this2.props.shipmentAdd(values); _this2.props.resetForm('shipments'); }; }; AppComponent.prototype.render = function render() { var shipments = this.props.shipments; var initialValues = { senderDetails: { name: 'ACME Co.', address: '123 Fake Ln.' } }; return React.createElement( 'div', { className: 'o-wrapper' }, React.createElement( 'div', { className: 'o-layout' }, React.createElement( 'div', { className: 'o-layout__item u-1/2@tablet' }, React.createElement( 'h1', { className: 'c-h1' }, 'Create a shipment' ), React.createElement( 'p', null, 'Use the form below to create shipment records' ), React.createElement(ShipmentForm, _extends({ onSubmit: this.handleSubmit }, { initialValues: initialValues })), React.createElement(ShipmentsList, { shipments: shipments }) ), React.createElement( 'div', { className: 'o-layout__item u-1/2@tablet' }, React.createElement( 'h1', { className: 'c-h1' }, 'A simple redux-form demo' ), React.createElement( 'p', null, 'This is a very basic form with validations and error messages.' ), React.createElement( 'ul', { className: 'o-list' }, React.createElement( 'li', { className: 'u-margin-bottom-small' }, 'Attempting to submit an invalid form displays validation errors.' ), React.createElement( 'li', { className: 'u-margin-bottom-small' }, 'Fields can be populated with initial values.' ), React.createElement( 'li', { className: 'u-margin-bottom-small' }, 'The Delivery Date and Quantity fields are formatted.' ), React.createElement( 'li', { className: 'u-margin-bottom-small' }, 'Once the form passes validation on submit, the values are returned in a callback' ) ), React.createElement( 'p', null, 'The Container is responsible for handling the final form data, it can easily be sent to an API request.' ) ) ) ); }; return AppComponent; }(React.Component), _class.propTypes = { resetForm: React.PropTypes.func.isRequired, shipmentAdd: React.PropTypes.func.isRequired, shipments: React.PropTypes.array.isRequired }, _temp); var AppContainer = ReactRedux.connect(function (state) { return { shipments: state.shipments }; }, { resetForm: ReduxForm.reset, shipmentAdd: shipmentActions.add })(AppComponent); // END CONTAINERS // BEGIN VALIDATORS var validators = { personDetails: function personDetails(values) { var errors = {}; if (!values || !values.name) { errors.name = 'Required'; } if (!values || !values.address) { errors.address = 'Required'; } return errors; }, messageDetails: function messageDetails(values) { var errors = {}; if (!values || !values.deliveryDate) { errors.deliveryDate = 'Required'; } else if (!$.payment.validateCardExpiry.apply({}, values.deliveryDate.split(' / '))) { errors.deliveryDate = 'Invalid'; } if (!values || !values.quantity) { errors.quantity = 'Required'; } else if (/^\d+$/.test(values.quantity) === false) { errors.quantity = 'Must be an integer'; } if (!values || !values.type) { errors.type = 'Required'; } return errors; } }; // END VALIDATORS // BEGIN FORMS var ShipmentComponent = function (_React$Component2) { _inherits(ShipmentComponent, _React$Component2); function ShipmentComponent() { _classCallCheck(this, ShipmentComponent); return _possibleConstructorReturn(this, _React$Component2.apply(this, arguments)); } ShipmentComponent.prototype.render = function render() { var handleSubmit = this.props.handleSubmit; return React.createElement( 'form', { onSubmit: handleSubmit }, React.createElement( 'h4', { className: 'c-h4 u-margin-bottom-small' }, 'Sender Details' ), React.createElement( FormSection, { name: 'senderDetails' }, React.createElement(PersonDetailsSection, null) ), React.createElement( 'h4', { className: 'c-h4 u-margin-bottom-small' }, 'Recipient Details' ), React.createElement( FormSection, { name: 'recipientDetails' }, React.createElement(PersonDetailsSection, null) ), React.createElement( 'h4', { className: 'c-h4 u-margin-bottom-small' }, 'Order Details' ), React.createElement( FormSection, { name: 'messageDetails' }, React.createElement(OrderDetailsSection, null), React.createElement(DeliveryOptions, null) ), React.createElement( 'button', { className: 'c-form-button c-form-button--primary c-form-button--block', type: 'submit' }, 'Submit' ), React.createElement( 'p', { className: 'c-text-small c-text-small--muted u-center-text' }, 'All fields are required' ) ); }; return ShipmentComponent; }(React.Component); var ShipmentForm = reduxForm({ form: 'shipments', validate: validateFields({ senderDetails: validators.personDetails, recipientDetails: validators.personDetails, messageDetails: validators.messageDetails }) })(ShipmentComponent); // END FORMS // BEGIN SECTIONS var DeliveryOptions = function (_React$Component3) { _inherits(DeliveryOptions, _React$Component3); function DeliveryOptions() { _classCallCheck(this, DeliveryOptions); return _possibleConstructorReturn(this, _React$Component3.apply(this, arguments)); } DeliveryOptions.prototype.render = function render() { return React.createElement(Field, { component: RadioControl, name: 'type', options: [{ classes: 'u-1/3', label: 'Small', value: 'small' }, { classes: 'u-1/3', label: 'Medium', value: 'medium' }, { classes: 'u-1/3', label: 'Large', value: 'large' }] }); }; return DeliveryOptions; }(React.Component); var PersonDetailsSection = function (_React$Component4) { _inherits(PersonDetailsSection, _React$Component4); function PersonDetailsSection() { _classCallCheck(this, PersonDetailsSection); return _possibleConstructorReturn(this, _React$Component4.apply(this, arguments)); } PersonDetailsSection.prototype.render = function render() { return React.createElement( 'div', { className: 'o-layout u-margin-bottom-small' }, React.createElement( 'div', { className: 'o-layout__item u-1/1 u-1/2@tablet' }, React.createElement(Field, { component: InputControl, name: 'name', placeholder: 'Name', type: 'text' }) ), React.createElement( 'div', { className: 'o-layout__item u-1/1 u-1/2@tablet' }, React.createElement(Field, { component: InputControl, name: 'address', placeholder: 'Address', type: 'text' }) ) ); }; return PersonDetailsSection; }(React.Component); var OrderDetailsSection = function (_React$Component5) { _inherits(OrderDetailsSection, _React$Component5); function OrderDetailsSection() { _classCallCheck(this, OrderDetailsSection); return _possibleConstructorReturn(this, _React$Component5.apply(this, arguments)); } OrderDetailsSection.prototype.render = function render() { return React.createElement( 'div', { className: 'o-layout u-margin-bottom-small' }, React.createElement( 'div', { className: 'o-layout__item u-1/1 u-1/2@tablet' }, React.createElement(Field, { component: InputControl, format: formatters.date, name: 'deliveryDate', placeholder: 'MM / YY', type: 'text' }) ), React.createElement( 'div', { className: 'o-layout__item u-1/1 u-1/2@tablet' }, React.createElement(Field, { component: InputControl, format: formatters.number, name: 'quantity', parse: parsers.number, placeholder: 'Quantity', type: 'text' }) ) ); }; return OrderDetailsSection; }(React.Component); // END SECTIONS // BEGIN CONTROLS var RadioControl = (_temp2 = _class2 = function (_React$Component6) { _inherits(RadioControl, _React$Component6); function RadioControl() { _classCallCheck(this, RadioControl); return _possibleConstructorReturn(this, _React$Component6.apply(this, arguments)); } RadioControl.prototype.handleChange = function handleChange(value) { var _this8 = this; return function () { _this8.props.input.onChange(value); }; }; RadioControl.prototype.render = function render() { var _this9 = this; var _props = this.props; var options = _props.options; var _props$input = _props.input; var name = _props$input.name; var value = _props$input.value; var _props$meta = _props.meta; var error = _props$meta.error; var touched = _props$meta.touched; var className = classNames({ 'c-radio-control': true, 'c-radio-control--error': touched && error }); return React.createElement( 'div', { className: className }, React.createElement( 'div', { className: 'o-layout' }, options.map(function (field, key) { var _classNames; var fieldClassName = classNames((_classNames = { 'c-radio-control__item': true, 'o-layout__item': true }, _classNames[field.classes] = true, _classNames)); return React.createElement( 'div', _extends({ className: fieldClassName }, { key: key }), React.createElement('input', _extends({ checked: value === field.value, className: 'c-radio-control__field u-hidden-visually', id: name + '_' + key, onChange: _this9.handleChange(field.value), type: 'radio', value: field.value }, { name: name })), React.createElement( 'label', { className: 'c-radio-control__label', htmlFor: name + '_' + key }, field.label ) ); }), React.createElement( 'div', { className: 'o-layout__item u-1/1 c-radio-control__hint c-text-small' }, touched && error ) ) ); }; return RadioControl; }(React.Component), _class2.propTypes = { options: React.PropTypes.array.isRequired }, _temp2); var InputControl = (_temp3 = _class3 = function (_React$Component7) { _inherits(InputControl, _React$Component7); function InputControl() { _classCallCheck(this, InputControl); return _possibleConstructorReturn(this, _React$Component7.apply(this, arguments)); } InputControl.prototype.render = function render() { var _props2 = this.props; var input = _props2.input; var type = _props2.type; var placeholder = _props2.placeholder; var _props2$meta = _props2.meta; var error = _props2$meta.error; var touched = _props2$meta.touched; var className = classNames({ 'c-input-control': true, 'c-input-control--error': touched && error }); return React.createElement( 'div', { className: className }, React.createElement('input', _extends({ className: 'c-input-control__input' }, input, { type: type, placeholder: placeholder })), React.createElement( 'div', { className: 'c-input-control__hint c-text-small' }, touched && error ) ); }; return InputControl; }(React.Component), _class3.propTypes = { placeholder: React.PropTypes.string, type: React.PropTypes.string.isRequired }, _temp3); // END CONTROLS // BEGIN COMPONENTS var ShipmentsList = (_temp4 = _class4 = function (_React$Component8) { _inherits(ShipmentsList, _React$Component8); function ShipmentsList() { _classCallCheck(this, ShipmentsList); return _possibleConstructorReturn(this, _React$Component8.apply(this, arguments)); } ShipmentsList.prototype.renderShipment = function renderShipment(_ref, key) { var senderDetails = _ref.senderDetails; var recipientDetails = _ref.recipientDetails; var messageDetails = _ref.messageDetails; return React.createElement( 'li', { key: key }, React.createElement('hr', { className: 'c-hr u-margin-bottom' }), React.createElement( 'div', { className: 'o-media u-margin-top' }, React.createElement( 'div', { className: 'o-media__img' }, React.createElement( 'p', null, key + 1 ) ), React.createElement( 'div', { className: 'o-media__body' }, React.createElement( 'div', { className: 'o-layout' }, React.createElement( 'div', { className: 'o-layout__item u-1/2' }, React.createElement( 'dl', null, React.createElement( 'dt', null, senderDetails.name ), React.createElement( 'dd', null, senderDetails.address ) ) ), React.createElement( 'div', { className: 'o-layout__item u-1/2' }, React.createElement( 'dl', null, React.createElement( 'dt', null, recipientDetails.name ), React.createElement( 'dd', null, recipientDetails.address ) ) ), React.createElement( 'div', { className: 'o-layout__item u-1/1' }, React.createElement( 'p', null, React.createElement( 'strong', { className: 'u-capitalize-text' }, messageDetails.type ), ' delivery of ', React.createElement( 'strong', null, messageDetails.quantity ), ' units to be delivered by ', React.createElement( 'strong', null, messageDetails.deliveryDate ) ) ) ) ) ) ); }; ShipmentsList.prototype.render = function render() { var shipments = this.props.shipments; return React.createElement( 'ul', { className: 'o-list-bare' }, shipments.map(this.renderShipment) ); }; return ShipmentsList; }(React.Component), _class4.propTypes = { shipments: React.PropTypes.array.isRequired }, _temp4); // END COMPONENTS // BEGIN UTILITIES function validateFields(validators) { return function (values) { return Object.keys(validators).map(function (name) { return { name: name, // 5625463739 error: validators[name](values[name]) }; }).reduce(function (p, _ref2) { var _extends2; var name = _ref2.name; var error = _ref2.error; return Object.keys(name).length ? _extends({}, p, (_extends2 = {}, _extends2[name] = error, _extends2)) : p; }, {}); }; } var formatters = { date: function date() { var value = arguments.length <= 0 || arguments[0] === undefined ? '' : arguments[0]; return $.payment.formatExpiry(value); }, // the default return value should always be an empty string number: function number(value) { return value ? (+value).toLocaleString() : ''; } }; var parsers = { number: function number(value) { return value ? (value.match(/\d+/g) || []).join('') : ''; } }; // END UTILITIES //# sourceURL=pen.js </script> </body></html>

Related: See More


Questions / Comments: