├── .ruby-version ├── vendor └── assets │ ├── scss │ ├── components │ │ ├── _flex-video.scss │ │ ├── _menu-icon.scss │ │ ├── _float.scss │ │ ├── _sticky.scss │ │ ├── _progress-bar.scss │ │ ├── _badge.scss │ │ ├── _responsive-embed.scss │ │ ├── _label.scss │ │ ├── _thumbnail.scss │ │ ├── _dropdown.scss │ │ ├── _title-bar.scss │ │ ├── _media-object.scss │ │ ├── _callout.scss │ │ ├── _card.scss │ │ ├── _flex.scss │ │ ├── _slider.scss │ │ ├── _breadcrumbs.scss │ │ ├── _tooltip.scss │ │ └── _drilldown.scss │ ├── util │ │ ├── _util.scss │ │ ├── _direction.scss │ │ ├── _selector.scss │ │ ├── _typography.scss │ │ └── _flex.scss │ ├── motion-ui │ │ ├── util │ │ │ ├── _animation.scss │ │ │ ├── _args.scss │ │ │ ├── _selector.scss │ │ │ ├── _string.scss │ │ │ ├── _transition.scss │ │ │ ├── _unit.scss │ │ │ ├── _series.scss │ │ │ └── _function.scss │ │ ├── effects │ │ │ ├── _zoom.scss │ │ │ ├── _wiggle.scss │ │ │ ├── _shake.scss │ │ │ ├── _fade.scss │ │ │ ├── _spin.scss │ │ │ ├── _slide.scss │ │ │ └── _hinge.scss │ │ ├── motion-ui.scss │ │ ├── transitions │ │ │ ├── _fade.scss │ │ │ ├── _spin.scss │ │ │ ├── _slide.scss │ │ │ ├── _zoom.scss │ │ │ └── _hinge.scss │ │ ├── _settings.scss │ │ └── _classes.scss │ ├── typography │ │ ├── _alignment.scss │ │ ├── _typography.scss │ │ └── _print.scss │ ├── prototype │ │ ├── _box.scss │ │ ├── _arrow.scss │ │ ├── _border-box.scss │ │ ├── _border-none.scss │ │ ├── _rotate.scss │ │ ├── _shadow.scss │ │ ├── _display.scss │ │ ├── _text-decoration.scss │ │ ├── _text-transformation.scss │ │ ├── _bordered.scss │ │ ├── _rounded.scss │ │ ├── _sizing.scss │ │ ├── _prototype.scss │ │ ├── _text-utilities.scss │ │ ├── _overflow.scss │ │ ├── _font-styling.scss │ │ ├── _separator.scss │ │ ├── _list-style-type.scss │ │ └── _position.scss │ ├── grid │ │ ├── _size.scss │ │ ├── _grid.scss │ │ ├── _layout.scss │ │ ├── _gutter.scss │ │ ├── _column.scss │ │ ├── _position.scss │ │ └── _row.scss │ ├── forms │ │ ├── _help-text.scss │ │ ├── _forms.scss │ │ ├── _checkbox.scss │ │ ├── _fieldset.scss │ │ ├── _label.scss │ │ ├── _progress.scss │ │ ├── _select.scss │ │ ├── _error.scss │ │ ├── _meter.scss │ │ └── _input-group.scss │ └── xy-grid │ │ ├── _grid.scss │ │ ├── _xy-grid.scss │ │ ├── _gutters.scss │ │ ├── _layout.scss │ │ ├── _collapse.scss │ │ ├── _position.scss │ │ └── _frame.scss │ ├── _vendor │ └── sassy-lists │ │ └── stylesheets │ │ ├── helpers │ │ ├── _true.scss │ │ └── _missing-dependencies.scss │ │ └── functions │ │ ├── _to-list.scss │ │ ├── _contain.scss │ │ ├── _remove.scss │ │ ├── _purge.scss │ │ └── _replace.scss │ └── js │ └── plugins │ ├── foundation.util.imageLoader.min.js │ ├── foundation.util.timer.min.js │ ├── foundation.util.nest.min.js │ ├── foundation.util.motion.min.js │ ├── foundation.util.box.min.js │ └── foundation.util.keyboard.min.js ├── lib ├── foundation-rails.rb ├── foundation │ ├── rails.rb │ └── rails │ │ ├── version.rb │ │ └── engine.rb └── generators │ └── foundation │ ├── templates │ ├── browserslist │ ├── application.html.slim │ ├── application.html.haml │ ├── application.html.erb │ └── foundation_and_overrides.scss │ └── install_generator.rb ├── config └── routes.rb ├── Gemfile ├── bower.json ├── gemfiles ├── rails_4.1.gemfile ├── rails_4.2.gemfile ├── rails_5.0.gemfile ├── rails_5.1.gemfile ├── rails_5.2.gemfile └── rails_7.1.gemfile ├── .gitignore ├── app └── controllers │ └── foundation │ └── rails │ └── styleguide_controller.rb ├── Appraisals ├── spec ├── spec_helper.rb ├── support │ └── helpers.rb └── features │ └── generator_spec.rb ├── .travis.yml ├── LICENSE.txt ├── foundation-rails.gemspec ├── Rakefile └── README.md /.ruby-version: -------------------------------------------------------------------------------- 1 | 3.2.2 2 | -------------------------------------------------------------------------------- /vendor/assets/scss/components/_flex-video.scss: -------------------------------------------------------------------------------- 1 | @import 'responsive-embed'; 2 | -------------------------------------------------------------------------------- /lib/foundation-rails.rb: -------------------------------------------------------------------------------- 1 | require 'foundation/rails' 2 | require 'sprockets/es6' 3 | -------------------------------------------------------------------------------- /config/routes.rb: -------------------------------------------------------------------------------- 1 | Foundation::Rails::Engine.routes.draw do 2 | root :to => "styleguide#show" 3 | end -------------------------------------------------------------------------------- /lib/foundation/rails.rb: -------------------------------------------------------------------------------- 1 | require 'foundation/rails/engine' 2 | require 'foundation/rails/version' 3 | -------------------------------------------------------------------------------- /lib/generators/foundation/templates/browserslist: -------------------------------------------------------------------------------- 1 | last 2 versions 2 | ie >= 9 3 | Android >= 2.3 4 | ios >= 7 5 | -------------------------------------------------------------------------------- /lib/foundation/rails/version.rb: -------------------------------------------------------------------------------- 1 | module Foundation 2 | module Rails 3 | VERSION = "6.9.0.0" 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | gemspec 3 | 4 | gem 'rails' 5 | gem 'sassc' 6 | gem 'railties' 7 | gem 'sprockets-es6' 8 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "foundation-rails", 3 | "version": "6.9.0.0", 4 | "dependencies": { 5 | "foundation-sites": "6.9.0", 6 | "motion-ui": "2.0.8" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /lib/foundation/rails/engine.rb: -------------------------------------------------------------------------------- 1 | require 'rails' 2 | 3 | module Foundation 4 | module Rails 5 | class Engine < ::Rails::Engine 6 | isolate_namespace Foundation::Rails 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /gemfiles/rails_4.1.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "https://rubygems.org" 4 | 5 | gem "rails", "~> 4.1" 6 | gem "sass" 7 | gem "railties" 8 | gem "sprockets-es6" 9 | 10 | gemspec path: "../" 11 | -------------------------------------------------------------------------------- /gemfiles/rails_4.2.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "https://rubygems.org" 4 | 5 | gem "rails", "~> 4.2" 6 | gem "sass" 7 | gem "railties" 8 | gem "sprockets-es6" 9 | 10 | gemspec path: "../" 11 | -------------------------------------------------------------------------------- /gemfiles/rails_5.0.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "https://rubygems.org" 4 | 5 | gem "rails", "~> 5.0" 6 | gem "sass" 7 | gem "railties" 8 | gem "sprockets-es6" 9 | 10 | gemspec path: "../" 11 | -------------------------------------------------------------------------------- /gemfiles/rails_5.1.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "https://rubygems.org" 4 | 5 | gem "rails", "~> 5.1" 6 | gem "sass" 7 | gem "railties" 8 | gem "sprockets-es6" 9 | 10 | gemspec path: "../" 11 | -------------------------------------------------------------------------------- /gemfiles/rails_5.2.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "https://rubygems.org" 4 | 5 | gem "rails", "~> 5.2" 6 | gem "sass" 7 | gem "railties" 8 | gem "sprockets-es6" 9 | 10 | gemspec path: "../" 11 | -------------------------------------------------------------------------------- /gemfiles/rails_7.1.gemfile: -------------------------------------------------------------------------------- 1 | # This file was generated by Appraisal 2 | 3 | source "https://rubygems.org" 4 | 5 | gem "rails", "~> 7.1" 6 | gem "sassc" 7 | gem "railties" 8 | gem "sprockets-es6" 9 | 10 | gemspec path: "../" 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.gem 2 | *.rbc 3 | .bundle 4 | .config 5 | .yardoc 6 | InstalledFiles 7 | _yardoc 8 | coverage 9 | doc/ 10 | lib/bundler/man 11 | pkg 12 | rdoc 13 | spec/reports 14 | test/tmp 15 | test/version_tmp 16 | tmp 17 | /bower_components/* 18 | *.swp 19 | -------------------------------------------------------------------------------- /app/controllers/foundation/rails/styleguide_controller.rb: -------------------------------------------------------------------------------- 1 | module Foundation 2 | module Rails 3 | class StyleguideController < ::ActionController::Base 4 | layout false 5 | def show 6 | 7 | end 8 | end 9 | end 10 | end -------------------------------------------------------------------------------- /vendor/assets/scss/components/_menu-icon.scss: -------------------------------------------------------------------------------- 1 | @mixin foundation-menu-icon { 2 | .menu-icon { 3 | @include hamburger($color: $titlebar-icon-color, $color-hover: $titlebar-icon-color-hover); 4 | } 5 | 6 | .menu-icon.dark { 7 | @include hamburger; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /vendor/assets/scss/util/_util.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | @import 'math'; 6 | @import 'unit'; 7 | @import 'value'; 8 | @import 'direction'; 9 | @import 'color'; 10 | @import 'selector'; 11 | @import 'flex'; 12 | @import 'breakpoint'; 13 | @import 'mixins'; 14 | @import 'typography'; 15 | -------------------------------------------------------------------------------- /vendor/assets/_vendor/sassy-lists/stylesheets/helpers/_true.scss: -------------------------------------------------------------------------------- 1 | /// 2 | /// Returns truthiness of `$value`. 3 | /// 4 | /// @access private 5 | /// 6 | /// @param {*} $value - value to check 7 | /// 8 | /// @return {Bool} 9 | /// 10 | 11 | @function sl-is-true($value) { 12 | @return if($value == null, false, $value and $value != null and $value != '' and $value != ()); 13 | } 14 | -------------------------------------------------------------------------------- /Appraisals: -------------------------------------------------------------------------------- 1 | appraise 'rails_4.1' do 2 | gem 'rails', '~> 4.1' 3 | end 4 | 5 | appraise 'rails_4.2' do 6 | gem 'rails', '~> 4.2' 7 | end 8 | 9 | appraise 'rails_5.0' do 10 | gem 'rails', '~> 5.0' 11 | end 12 | 13 | appraise 'rails_5.1' do 14 | gem 'rails', '~> 5.1' 15 | end 16 | 17 | appraise 'rails_5.2' do 18 | gem 'rails', '~> 5.2' 19 | end 20 | 21 | appraise 'rails_7.1' do 22 | gem 'rails', '~> 7.1' 23 | end 24 | -------------------------------------------------------------------------------- /spec/spec_helper.rb: -------------------------------------------------------------------------------- 1 | require 'capybara/rspec' 2 | require 'bundler/setup' 3 | 4 | Bundler.require(:default, :test) 5 | 6 | Dir['./spec/support/**/*.rb'].each { |file| require file } 7 | 8 | RSpec.configure do |config| 9 | config.include FoundationRailsTestHelpers 10 | 11 | config.before(:all) do 12 | create_dummy_app 13 | install_foundation 14 | end 15 | 16 | config.after(:all) do 17 | remove_dummy_app 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /vendor/assets/scss/motion-ui/util/_animation.scss: -------------------------------------------------------------------------------- 1 | /// Creates a keyframe from one or more effect functions and assigns it to the element by adding the `animation-name` property. 2 | /// @param {Arglist} $effects... - One or more effect functions to build the keyframe with. 3 | @mixin mui-animation($args...) { 4 | $name: map-get(-mui-process-args($args...), name); 5 | animation-name: unquote($name); 6 | @include mui-keyframes($name, $args...); 7 | } 8 | -------------------------------------------------------------------------------- /vendor/assets/scss/motion-ui/util/_args.scss: -------------------------------------------------------------------------------- 1 | /// Processes a series of keyframe function arguments. 2 | /// @access private 3 | @function -mui-process-args($args...) { 4 | @if length($args) == 1 { 5 | $arg: nth($args, 1); 6 | 7 | @if -mui-is-function($arg) { 8 | @return -mui-safe-call($arg); 9 | } @else if type-of($arg) == 'map' { 10 | @return $arg; 11 | } 12 | } 13 | 14 | @return -mui-keyframe-combine($args...); 15 | } 16 | -------------------------------------------------------------------------------- /lib/generators/foundation/templates/application.html.slim: -------------------------------------------------------------------------------- 1 | doctype html 2 | html lang="en" 3 | head 4 | meta charset="utf-8" 5 | meta name="viewport" content="width=device-width, initial-scale=1.0" 6 | 7 | title == content_for?(:title) ? yield(:title) : "Untitled" 8 | 9 | = stylesheet_link_tag "application" 10 | = javascript_include_tag "application", "data-turbolinks-track" => true 11 | = csrf_meta_tag 12 | 13 | body 14 | 15 | == yield 16 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: ruby 2 | sudo: false 3 | cache: bundler 4 | 5 | rvm: 6 | - 2.3.8 7 | - 2.4.5 8 | - 2.5.3 9 | - 3.2.2 10 | 11 | gemfile: 12 | - gemfiles/rails_4.1.gemfile 13 | - gemfiles/rails_4.2.gemfile 14 | - gemfiles/rails_5.0.gemfile 15 | - gemfiles/rails_5.1.gemfile 16 | - gemfiles/rails_5.2.gemfile 17 | - gemfiles/rails_7.1.gemfile 18 | 19 | before_install: 20 | - gem update --system --no-doc 21 | - gem install bundler 22 | 23 | notifications: 24 | email: false 25 | -------------------------------------------------------------------------------- /lib/generators/foundation/templates/application.html.haml: -------------------------------------------------------------------------------- 1 | !!! 5 2 | %html{ :lang => "en" } 3 | %head 4 | %meta{ :charset => "utf-8" } 5 | 6 | %meta{ :name => "viewport", :content => "width=device-width, initial-scale=1.0" } 7 | 8 | %title= content_for?(:title) ? yield(:title) : "Untitled" 9 | 10 | = stylesheet_link_tag "application" 11 | = javascript_include_tag "application", "data-turbolinks-track" => true 12 | = csrf_meta_tag 13 | 14 | %body 15 | 16 | = yield 17 | -------------------------------------------------------------------------------- /vendor/assets/scss/components/_float.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group float 7 | //// 8 | 9 | @mixin foundation-float-classes { 10 | .float-left { 11 | float: left !important; 12 | } 13 | 14 | .float-right { 15 | float: right !important; 16 | } 17 | 18 | .float-center { 19 | display: block; 20 | margin-right: auto; 21 | margin-left: auto; 22 | } 23 | 24 | .clearfix { 25 | @include clearfix; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /lib/generators/foundation/templates/application.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | <%%= content_for?(:title) ? yield(:title) : "Untitled" %> 8 | 9 | <%%= stylesheet_link_tag "application" %> 10 | <%%= javascript_include_tag "application", 'data-turbolinks-track' => true %> 11 | <%%= csrf_meta_tags %> 12 | 13 | 14 | 15 | 16 | <%%= yield %> 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /vendor/assets/scss/motion-ui/effects/_zoom.scss: -------------------------------------------------------------------------------- 1 | /// Creates a scaling transition. A scale of `1` means the element is the same size. Larger numbers make the element bigger, while numbers less than 1 make the element smaller. 2 | /// @param {Number} $from [0] - Size to start at. 3 | /// @param {Number} $to [1] - Size to end at. 4 | @function zoom( 5 | $from: 0, 6 | $to: 1 7 | ) { 8 | $keyframes: ( 9 | name: -mui-string-safe('scale-#{$to}-to-#{$from}'), 10 | 0: (transform: scale($from)), 11 | 100: (transform: scale($to)), 12 | ); 13 | 14 | @return $keyframes; 15 | } 16 | -------------------------------------------------------------------------------- /vendor/assets/scss/motion-ui/effects/_wiggle.scss: -------------------------------------------------------------------------------- 1 | /// Creates a wiggling animation. 2 | /// @param {Number} $intensity [7deg] - Intensity of the wiggle. Can be any CSS angle unit. 3 | /// @return {Map} A keyframes map that can be used with the `generate-keyframes()` mixin. 4 | @function wiggle($intensity: 7deg) { 5 | $keyframes: ( 6 | name: -mui-string-safe('wiggle-#{$intensity}'), 7 | (40, 50, 60): (transform: rotate($intensity)), 8 | (35, 45, 55, 65): (transform: rotate(-$intensity)), 9 | (0, 30, 70, 100): (transform: rotate(0)), 10 | ); 11 | 12 | @return $keyframes; 13 | } 14 | -------------------------------------------------------------------------------- /vendor/assets/scss/typography/_alignment.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | @mixin foundation-text-alignment { 6 | @each $size in $breakpoint-classes { 7 | @include breakpoint($size) { 8 | @each $align in (left, right, center, justify) { 9 | @if $size != $-zf-zero-breakpoint { 10 | .#{$size}-text-#{$align} { 11 | text-align: $align; 12 | } 13 | } 14 | @else { 15 | .text-#{$align} { 16 | text-align: $align; 17 | } 18 | } 19 | } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /vendor/assets/scss/motion-ui/effects/_shake.scss: -------------------------------------------------------------------------------- 1 | /// Creates a shaking animation. 2 | /// @param {Percentage} $intensity [7%] - Intensity of the shake, as a percentage value. 3 | /// @return {Map} A keyframes map that can be used with the `generate-keyframes()` mixin. 4 | @function shake($intensity: 7%) { 5 | $right: (0, 10, 20, 30, 40, 50, 60, 70, 80, 90); 6 | $left: (5, 15, 25, 35, 45, 55, 65, 75, 85, 95); 7 | 8 | $keyframes: ( 9 | name: -mui-string-safe('shake-#{$intensity}'), 10 | $right: (transform: translateX($intensity)), 11 | $left: (transform: translateX(-$intensity)), 12 | ); 13 | 14 | @return $keyframes; 15 | } 16 | -------------------------------------------------------------------------------- /vendor/assets/scss/typography/_typography.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group typography 7 | //// 8 | 9 | // Base typography styles (tags only) 10 | @import 'base'; 11 | 12 | // Typography helper classes (classes only) 13 | @import 'helpers'; 14 | 15 | // Text alignment classes 16 | @import 'alignment'; 17 | 18 | // Print styles 19 | @import 'print'; 20 | 21 | @mixin foundation-typography { 22 | @include foundation-typography-base; 23 | @include foundation-typography-helpers; 24 | @include foundation-text-alignment; 25 | @include foundation-print-styles; 26 | } 27 | -------------------------------------------------------------------------------- /vendor/assets/scss/prototype/_box.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-box 7 | //// 8 | 9 | /// Box Mixin: Easily create a square, rectangle or a circle 10 | /// @param {Number} $width[] Width of the box 11 | /// @param {Number} $height[$width] Height of the box, defaults to `$width` to easily make a square 12 | /// @param {Boolean} $circle[false] Makes the box a circle, by default `false`. 13 | @mixin box( 14 | $width, 15 | $height: $width, 16 | $circle: false 17 | ) { 18 | width: $width; 19 | height: $height; 20 | @if $circle { 21 | border-radius: 50% !important; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /vendor/assets/scss/grid/_size.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group grid 7 | //// 8 | 9 | /// Set the width of a grid column. 10 | /// 11 | /// @param {Number|List} $width [$grid-column-count] - Width to make the column. You can pass in any value accepted by the `grid-column()` function, such as `6`, `50%`, or `1 of 2`. 12 | @mixin grid-column-size( 13 | $columns: $grid-column-count 14 | ) { 15 | width: grid-column($columns); 16 | } 17 | 18 | /// Shorthand for `grid-column-size()`. 19 | /// @alias grid-column-size 20 | @mixin grid-col-size( 21 | $columns: $grid-column-count 22 | ) { 23 | @include grid-column-size($columns); 24 | } 25 | -------------------------------------------------------------------------------- /vendor/assets/_vendor/sassy-lists/stylesheets/functions/_to-list.scss: -------------------------------------------------------------------------------- 1 | /// 2 | /// Casts `$value` into a list. 3 | /// 4 | /// @ignore Documentation: http://at-import.github.io/SassyLists/documentation/#function-sl-to-list 5 | /// 6 | /// @param {*} $value - value to cast to list 7 | /// @param {String} $separator [space] - separator to use 8 | /// 9 | /// @example 10 | /// sl-to-list(a b c, comma) 11 | /// // a, b, c 12 | /// 13 | /// @return {List} 14 | /// 15 | 16 | @function sl-to-list($value, $separator: list-separator($value)) { 17 | @return join((), $value, $separator); 18 | } 19 | 20 | /// 21 | /// @requires sl-to-list 22 | /// @alias sl-to-list 23 | /// 24 | 25 | @function sl-listify($value) { 26 | @return sl-to-list($value); 27 | } 28 | -------------------------------------------------------------------------------- /vendor/assets/scss/components/_sticky.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | @mixin foundation-sticky { 6 | .sticky-container { 7 | position: relative; 8 | } 9 | 10 | .sticky { 11 | position: relative; 12 | z-index: 0; 13 | transform: translate3d(0, 0, 0); 14 | } 15 | 16 | .sticky.is-stuck { 17 | position: fixed; 18 | z-index: 5; 19 | width: 100%; 20 | 21 | &.is-at-top { 22 | top: 0; 23 | } 24 | 25 | &.is-at-bottom { 26 | bottom: 0; 27 | } 28 | } 29 | 30 | .sticky.is-anchored { 31 | position: relative; 32 | right: auto; 33 | left: auto; 34 | 35 | &.is-at-bottom { 36 | bottom: 0; 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /vendor/assets/scss/motion-ui/effects/_fade.scss: -------------------------------------------------------------------------------- 1 | /// Creates a fading animation. 2 | /// @param {Number} $from [0] - Opacity to start at. 3 | /// @param {Number} $to [1] - Opacity to end at. 4 | /// @return {Map} A keyframes map that can be used with the `generate-keyframes()` mixin. 5 | @function fade( 6 | $from: 0, 7 | $to: 1 8 | ) { 9 | $type: type-of($from); 10 | $keyframes: (); 11 | 12 | @if $type == 'string' { 13 | @if $from == in { 14 | $from: 0; 15 | $to: 1; 16 | } @else if $from == out { 17 | $from: 1; 18 | $to: 0; 19 | } 20 | } 21 | 22 | $keyframes: ( 23 | name: -mui-string-safe('fade-#{$from}-to-#{$to}'), 24 | 0: (opacity: $from), 25 | 100: (opacity: $to), 26 | ); 27 | 28 | @return $keyframes; 29 | } 30 | -------------------------------------------------------------------------------- /vendor/assets/scss/forms/_help-text.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group forms 7 | //// 8 | 9 | /// Default color for help text. 10 | /// @type Color 11 | $helptext-color: $black !default; 12 | 13 | /// Default font size for help text. 14 | /// @type Number 15 | $helptext-font-size: rem-calc(13) !default; 16 | 17 | /// Default font style for help text. 18 | /// @type Keyword 19 | $helptext-font-style: italic !default; 20 | 21 | @mixin foundation-form-helptext { 22 | .help-text { 23 | $margin-top: ($form-spacing * 0.5) * -1; 24 | 25 | margin-top: $margin-top; 26 | font-size: $helptext-font-size; 27 | font-style: $helptext-font-style; 28 | color: $helptext-color; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /vendor/assets/_vendor/sassy-lists/stylesheets/functions/_contain.scss: -------------------------------------------------------------------------------- 1 | /// 2 | /// Returns whether `$list` contains `$value`. 3 | /// 4 | /// @ignore Documentation: http://at-import.github.io/SassyLists/documentation/#function-sl-contain 5 | /// 6 | /// @param {List} $list - list to check 7 | /// @param {*} $value - value to look for 8 | /// 9 | /// @example 10 | /// sl-contain(a b c, a) 11 | /// // true 12 | /// 13 | /// @example 14 | /// sl-contain(a b c, z) 15 | /// // false 16 | /// 17 | /// @return {Bool} 18 | /// 19 | 20 | @function sl-contain($list, $value) { 21 | @return not not index($list, $value); 22 | } 23 | 24 | /// 25 | /// @requires sl-contain 26 | /// @alias sl-contain 27 | /// 28 | 29 | @function sl-include($list, $value) { 30 | @return sl-contain($list, $value); 31 | } 32 | -------------------------------------------------------------------------------- /vendor/assets/_vendor/sassy-lists/stylesheets/functions/_remove.scss: -------------------------------------------------------------------------------- 1 | /// 2 | /// Removes value(s) `$value` from `$list`. 3 | /// 4 | /// @ignore Documentation: http://at-import.github.io/SassyLists/documentation/#function-sl-remove 5 | /// 6 | /// @requires sl-replace 7 | /// 8 | /// @param {List} $list - list to update 9 | /// @param {*} $value - value to remove 10 | /// 11 | /// @example 12 | /// sl-remove(a b c, a) 13 | /// // b c 14 | /// 15 | /// @return {List} 16 | /// 17 | 18 | @function sl-remove($list, $value) { 19 | $_: sl-missing-dependencies('sl-replace'); 20 | 21 | @return sl-replace($list, $value, null); 22 | } 23 | 24 | /// 25 | /// @requires sl-remove 26 | /// @alias sl-remove 27 | /// 28 | 29 | @function sl-without($list, $value) { 30 | @return sl-remove($list, $value); 31 | } 32 | -------------------------------------------------------------------------------- /vendor/assets/scss/motion-ui/motion-ui.scss: -------------------------------------------------------------------------------- 1 | // Motion UI by ZURB 2 | // foundation.zurb.com/motion-ui 3 | // Licensed under MIT Open Source 4 | 5 | @import 'settings'; 6 | 7 | @import 'util/animation'; 8 | @import 'util/args'; 9 | @import 'util/function'; 10 | @import 'util/keyframe'; 11 | @import 'util/selector'; 12 | @import 'util/series'; 13 | @import 'util/transition'; 14 | @import 'util/unit'; 15 | @import 'util/string'; 16 | 17 | @import 'effects/fade'; 18 | @import 'effects/hinge'; 19 | @import 'effects/spin'; 20 | @import 'effects/zoom'; 21 | @import 'effects/shake'; 22 | @import 'effects/slide'; 23 | @import 'effects/wiggle'; 24 | 25 | @import 'transitions/fade'; 26 | @import 'transitions/hinge'; 27 | @import 'transitions/zoom'; 28 | @import 'transitions/slide'; 29 | @import 'transitions/spin'; 30 | 31 | @import 'classes'; 32 | -------------------------------------------------------------------------------- /vendor/assets/_vendor/sassy-lists/stylesheets/helpers/_missing-dependencies.scss: -------------------------------------------------------------------------------- 1 | /// 2 | /// Checks whether `$functions` exist in global scope. 3 | /// 4 | /// @access private 5 | /// 6 | /// @param {ArgList} $functions - list of functions to check for 7 | /// 8 | /// @return {Bool} Whether or not there are missing dependencies 9 | /// 10 | 11 | @function sl-missing-dependencies($functions...) { 12 | $missing-dependencies: (); 13 | 14 | @each $function in $functions { 15 | @if not function-exists($function) { 16 | $missing-dependencies: append($missing-dependencies, $function, comma); 17 | } 18 | } 19 | 20 | @if length($missing-dependencies) > 0 { 21 | @error 'Unmet dependencies! The following functions are required: #{$missing-dependencies}.'; 22 | } 23 | 24 | @return length($missing-dependencies) > 0; 25 | } 26 | -------------------------------------------------------------------------------- /vendor/assets/scss/forms/_forms.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group forms 7 | //// 8 | 9 | /// Global spacing for form elements. 10 | /// @type Number 11 | $form-spacing: rem-calc(16) !default; 12 | 13 | @import 'text'; 14 | @import 'checkbox'; 15 | @import 'label'; 16 | @import 'help-text'; 17 | @import 'input-group'; 18 | @import 'fieldset'; 19 | @import 'select'; 20 | @import 'range'; 21 | @import 'progress'; 22 | @import 'meter'; 23 | @import 'error'; 24 | 25 | @mixin foundation-forms { 26 | @include foundation-form-text; 27 | @include foundation-form-checkbox; 28 | @include foundation-form-label; 29 | @include foundation-form-helptext; 30 | @include foundation-form-prepostfix; 31 | @include foundation-form-fieldset; 32 | @include foundation-form-select; 33 | @include foundation-form-error; 34 | } 35 | -------------------------------------------------------------------------------- /spec/support/helpers.rb: -------------------------------------------------------------------------------- 1 | module FoundationRailsTestHelpers 2 | def create_dummy_app 3 | FileUtils.cd(tmp_path) do 4 | %x(rails new dummy --skip-active-record --skip-test-unit --skip-spring --skip-bundle) 5 | File.open(dummy_app_path + '/Gemfile', 'a') do |f| 6 | f.puts "gem 'foundation-rails', path: '#{File.join(File.dirname(__FILE__), '..', '..')}'" 7 | end 8 | end 9 | FileUtils.cd(dummy_app_path) do 10 | %x(bundle install) 11 | end 12 | end 13 | 14 | def remove_dummy_app 15 | FileUtils.rm_rf(dummy_app_path) 16 | end 17 | 18 | def install_foundation 19 | FileUtils.cd(dummy_app_path) do 20 | puts %x(rails g foundation:install -f 2>&1) 21 | end 22 | end 23 | 24 | def dummy_app_path 25 | File.join(tmp_path, 'dummy') 26 | end 27 | 28 | def tmp_path 29 | @tmp_path ||= File.join(File.dirname(__FILE__), '..') 30 | end 31 | end 32 | -------------------------------------------------------------------------------- /vendor/assets/scss/prototype/_arrow.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-arrow 7 | //// 8 | 9 | /// Map containing all the `arrow` direction 10 | /// @type Map 11 | $prototype-arrow-directions: ( 12 | down, 13 | up, 14 | right, 15 | left 16 | ) !default; 17 | 18 | /// Width of the Arrow, `0.4375rem` by default. 19 | /// @type Number 20 | $prototype-arrow-size: 0.4375rem; 21 | 22 | /// Color of the Arrow, `$black` by default. 23 | /// @type Color 24 | $prototype-arrow-color: $black; 25 | 26 | @mixin foundation-prototype-arrow { 27 | @each $prototype-arrow-direction in $prototype-arrow-directions { 28 | .arrow-#{$prototype-arrow-direction} { 29 | @include css-triangle( 30 | $prototype-arrow-size, 31 | $prototype-arrow-color, 32 | $prototype-arrow-direction 33 | ); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /vendor/assets/_vendor/sassy-lists/stylesheets/functions/_purge.scss: -------------------------------------------------------------------------------- 1 | /// Removes all false and null values from `$list`. 2 | /// 3 | /// @ignore Documentation: http://at-import.github.io/SassyLists/documentation/#function-sl-purge 4 | /// 5 | /// @requires sl-is-true 6 | /// @requires sl-to-list 7 | /// 8 | /// @param {List} $list - list to purge 9 | /// 10 | /// @example 11 | /// sl-purge(null a false b) 12 | /// // a b 13 | /// 14 | /// @return {List} 15 | /// 16 | 17 | @function sl-purge($list) { 18 | $_: sl-missing-dependencies('sl-is-true', 'sl-to-list'); 19 | 20 | $result: (); 21 | 22 | @each $item in $list { 23 | @if sl-is-true($item) { 24 | $result: append($result, $item, list-separator($list)); 25 | } 26 | } 27 | 28 | @return sl-to-list($result); 29 | } 30 | 31 | /// 32 | /// @requires sl-purge 33 | /// @alias sl-purge 34 | /// 35 | 36 | @function sl-clean($list) { 37 | @return sl-purge($list); 38 | } 39 | -------------------------------------------------------------------------------- /vendor/assets/scss/prototype/_border-box.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-border-box 7 | //// 8 | 9 | /// Responsive breakpoints for border box. 10 | /// @type Boolean 11 | $prototype-border-box-breakpoints: $global-prototype-breakpoints !default; 12 | 13 | /// Border box utility 14 | @mixin border-box { 15 | box-sizing: border-box !important; 16 | } 17 | 18 | @mixin foundation-prototype-border-box { 19 | .border-box { 20 | @include border-box; 21 | } 22 | 23 | @if ($prototype-border-box-breakpoints) { 24 | // Loop through Responsive Breakpoints 25 | @each $size in $breakpoint-classes { 26 | @include breakpoint($size) { 27 | @if $size != $-zf-zero-breakpoint { 28 | .#{$size}-border-box { 29 | @include border-box; 30 | } 31 | } 32 | } 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /vendor/assets/scss/prototype/_border-none.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-border-none 7 | //// 8 | 9 | /// Responsive breakpoints for border none. 10 | /// @type Boolean 11 | $prototype-border-none-breakpoints: $global-prototype-breakpoints !default; 12 | 13 | /// Border none utility 14 | @mixin border-none { 15 | border: 0 !important; 16 | } 17 | 18 | @mixin foundation-prototype-border-none { 19 | .border-none { 20 | @include border-none; 21 | } 22 | 23 | @if ($prototype-border-none-breakpoints) { 24 | // Loop through Responsive Breakpoints 25 | @each $size in $breakpoint-classes { 26 | @include breakpoint($size) { 27 | @if $size != $-zf-zero-breakpoint { 28 | .#{$size}-border-none { 29 | @include border-none; 30 | } 31 | } 32 | } 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /vendor/assets/scss/util/_direction.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group functions 7 | //// 8 | 9 | /// Returns the opposite direction of $dir 10 | /// 11 | /// @param {Keyword} $dir - Used direction between "top", "right", "bottom" and "left". 12 | /// @return {Keyword} Opposite direction of $dir 13 | @function direction-opposite( 14 | $dir 15 | ) { 16 | $dirs: (top, right, bottom, left); 17 | $place: index($dirs, $dir); 18 | 19 | @if $place == null { 20 | @error 'direction-opposite: Invalid $dir parameter, expected a value from "#{$dirs}", found "#{$dir}".'; 21 | @return null; 22 | } 23 | 24 | // Calculate the opposite place in a circle, with a starting index of 1 25 | $length: length($dirs); 26 | $demi: $length * 0.5; 27 | $opposite-place: (($place + $demi - 1) % $length) + 1; 28 | 29 | @return nth($dirs, $opposite-place); 30 | } 31 | 32 | -------------------------------------------------------------------------------- /vendor/assets/scss/forms/_checkbox.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group forms 7 | //// 8 | 9 | @mixin foundation-form-checkbox { 10 | [type='file'], 11 | [type='checkbox'], 12 | [type='radio'] { 13 | margin: 0 0 $form-spacing; 14 | } 15 | 16 | // Styles for input/label siblings 17 | [type='checkbox'] + label, 18 | [type='radio'] + label { 19 | display: inline-block; 20 | vertical-align: baseline; 21 | 22 | margin-#{$global-left}: $form-spacing * 0.5; 23 | margin-#{$global-right}: $form-spacing; 24 | margin-bottom: 0; 25 | 26 | &[for] { 27 | cursor: pointer; 28 | } 29 | } 30 | 31 | // Styles for inputs inside labels 32 | label > [type='checkbox'], 33 | label > [type='radio'] { 34 | margin-#{$global-right}: $form-spacing * 0.5; 35 | } 36 | 37 | // Normalize file input width 38 | [type='file'] { 39 | width: 100%; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /vendor/assets/scss/prototype/_rotate.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | // sass-lint:disable mixin-name-format 6 | 7 | //// 8 | /// @group prototype-rotate 9 | //// 10 | 11 | /// Rotate Mixin: Rotate an element to a certain deg 12 | /// @param {Number} $deg[] Degree of rotation 13 | @mixin rotate($deg) { 14 | transform: rotate($deg + deg); 15 | } 16 | 17 | /// RotateX Mixin: Rotate an element to a certain deg on X-Axis 18 | /// @param {Number} $deg[] Degree of rotation 19 | @mixin rotateX($deg) { 20 | transform: rotateX($deg + deg); 21 | } 22 | 23 | /// RotateY Mixin: Rotate an element to a certain deg on Y-Axis 24 | /// @param {Number} $deg[] Degree of rotation 25 | @mixin rotateY($deg) { 26 | transform: rotateY($deg + deg); 27 | } 28 | 29 | /// RotateZ Mixin: Rotate an element to a certain deg on Z-Axis 30 | /// @param {Number} $deg[] Degree of rotation 31 | @mixin rotateZ($deg) { 32 | transform: rotateZ($deg + deg); 33 | } 34 | -------------------------------------------------------------------------------- /vendor/assets/scss/util/_selector.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group functions 7 | //// 8 | 9 | /// Generates a selector with every text input type. You can also filter the list to only output a subset of those selectors. 10 | /// 11 | /// @param {List|Keyword} $types [()] - A list of text input types to use. Leave blank to use all of them. 12 | /// @param {Keyword} $modifier [''] - A modifier to be applied to each text input type (e.g. a class or a pseudo-class). Leave blank to ignore. 13 | @function text-inputs($types: (), $modifier: '') { 14 | $return: (); 15 | 16 | $all-types: text password date datetime datetime-local month week email number search tel time url color; 17 | 18 | @if not has-value($types) { 19 | $types: $all-types; 20 | } 21 | 22 | @each $type in $types { 23 | $return: append($return, unquote('[type=\'#{$type}\']#{$modifier}'), comma); 24 | } 25 | 26 | @return $return; 27 | } 28 | -------------------------------------------------------------------------------- /vendor/assets/scss/motion-ui/util/_selector.scss: -------------------------------------------------------------------------------- 1 | /// Builds a selector for a motion class, using the settings defined in the `$motion-ui-classes` and `$motion-ui-states` maps. 2 | /// @param {String|List} $states - One or more strings that correlate to a state. 3 | /// @param {Boolean} $active - Defines if the selector is for the setup or active class. 4 | /// @return {String} A selector that can be interpolated into your Sass code. 5 | /// @access private 6 | @function -mui-build-selector($states, $active: false) { 7 | $return: ''; 8 | $chain: map-get($motion-ui-classes, chain); 9 | $prefix: map-get($motion-ui-classes, prefix); 10 | $suffix: map-get($motion-ui-classes, active); 11 | 12 | @each $sel in $states { 13 | $return: $return + if($chain, '&.', '#{&}-') + $prefix + $sel; 14 | 15 | @if $active { 16 | $return: $return + if($chain, '.', '#{&}-') + $prefix + $sel + $suffix; 17 | } 18 | 19 | $return: $return + ', '; 20 | } 21 | 22 | @return str-slice($return, 1, -3); 23 | } 24 | -------------------------------------------------------------------------------- /vendor/assets/scss/motion-ui/effects/_spin.scss: -------------------------------------------------------------------------------- 1 | /// Creates a spinning animation. 2 | /// @param {Keyword} $direction [null] - Direction to spin. Should be `cw` (clockwise) or `ccw` (counterclockwise). By default `cw` and `ccw` for `in` and `out` states respectively. 3 | /// @param {Number} $amount [360deg] - Amount to spin. Can be any CSS angle unit. 4 | /// @return {Map} A keyframes map that can be used with the `generate-keyframes()` mixin. 5 | @function spin( 6 | $state: in, 7 | $direction: null, 8 | $amount: 1turn 9 | ) { 10 | $start: 0; 11 | $end: 0; 12 | $direction: if($direction != null, $direction, if($state == in, cw, ccw)); 13 | 14 | @if $state == in { 15 | $start: if($direction == ccw, $amount, $amount * -1); 16 | $end: 0; 17 | } @else { 18 | $start: 0; 19 | $end: if($direction == ccw, $amount * -1, $amount); 20 | } 21 | 22 | $keyframes: ( 23 | name: -mui-string-safe('spin-#{$direction}-#{$amount}'), 24 | 0: (transform: rotate($start)), 25 | 100: (transform: rotate($end)), 26 | ); 27 | 28 | @return $keyframes; 29 | } 30 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2017 ZURB Inc. 2 | 3 | MIT License 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | "Software"), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 22 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /vendor/assets/scss/util/_typography.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group functions 7 | //// 8 | 9 | $-zf-font-stack: ( 10 | 'georgia': (Georgia, 'URW Bookman L', serif), 11 | 'helvetica': (Helvetica, Arial, 'Nimbus Sans L', sans-serif), 12 | 'lucida-grande': ('Lucida Grande', 'Lucida Sans Unicode', 'Bitstream Vera Sans', sans-serif), 13 | 'monospace': ('Courier New', Courier, 'Nimbus Sans L', monospace), 14 | 'system': (-apple-system, system-ui, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif), 15 | 'verdana': (Verdana, Geneva, 'DejaVu Sans', sans-serif), 16 | ); 17 | 18 | /// Return a font stack list from a map. Equivalent to `map-safe-get($name, $-zf-font-stack)`. 19 | /// 20 | /// @param {String} $stack - Name of the font stack. 21 | /// @param {Map} $map [$-zf-font-stack] - Map of font stacks to retrieve a list from. 22 | /// 23 | /// @returns {List} Found font stack. 24 | @function font-stack($stack, $map: $-zf-font-stack) { 25 | @return map-safe-get($map, $stack); 26 | } 27 | -------------------------------------------------------------------------------- /vendor/assets/_vendor/sassy-lists/stylesheets/functions/_replace.scss: -------------------------------------------------------------------------------- 1 | /// 2 | /// Replaces `$old` by `$new` in `$list`. 3 | /// 4 | /// @ignore Documentation: http://at-import.github.io/SassyLists/documentation/#function-sl-replace 5 | /// 6 | /// @requires sl-is-true 7 | /// @requires sl-purge 8 | /// @requires sl-to-list 9 | /// 10 | /// @param {List} $list - list to update 11 | /// @param {*} $old - value to replace 12 | /// @param {*} $value - new value for $old 13 | /// 14 | /// @example 15 | /// sl-replace(a b c, b, z) 16 | /// // a z c 17 | /// 18 | /// @example 19 | /// sl-replace(a b c, y, z) 20 | /// // a b c 21 | /// 22 | /// @return {List} 23 | /// 24 | 25 | @function sl-replace($list, $old, $value) { 26 | $_: sl-missing-dependencies('sl-is-true', 'sl-purge', 'sl-to-list'); 27 | 28 | $running: true; 29 | 30 | @while $running { 31 | $index: index($list, $old); 32 | 33 | @if not $index { 34 | $running: false; 35 | } 36 | 37 | @else { 38 | $list: set-nth($list, $index, $value); 39 | } 40 | 41 | } 42 | 43 | $list: if(sl-is-true($value), $list, sl-purge($list)); 44 | 45 | @return sl-to-list($list); 46 | } 47 | -------------------------------------------------------------------------------- /vendor/assets/scss/xy-grid/_grid.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group xy-grid 7 | //// 8 | 9 | /// Creates a max width container, designed to house your grid content. 10 | /// 11 | /// @param {Number} $width [$grid-container] - a width to limit the container to. 12 | /// @param {Number} $padding [$grid-container-padding] - paddings of the container. 13 | @mixin xy-grid-container( 14 | $width: $grid-container, 15 | $padding: $grid-container-padding 16 | ) { 17 | max-width: $width; 18 | margin-left: auto; 19 | margin-right: auto; 20 | 21 | @include xy-gutters($gutters: $padding, $gutter-type: padding); 22 | } 23 | 24 | /// Creates a container for your flex cells. 25 | /// 26 | /// @param {Keyword} $direction [horizontal] - Either horizontal or vertical direction of cells within. 27 | /// @param {Boolean} $wrap [true] - If the cells within should wrap or not. 28 | @mixin xy-grid( 29 | $direction: horizontal, 30 | $wrap: true 31 | ) { 32 | $direction: if($direction == 'horizontal', row, column); 33 | $wrap: if($wrap, wrap, nowrap); 34 | 35 | display: flex; 36 | flex-flow: $direction $wrap; 37 | } 38 | -------------------------------------------------------------------------------- /spec/features/generator_spec.rb: -------------------------------------------------------------------------------- 1 | require 'spec_helper' 2 | 3 | feature 'Foundation install succeeds' do 4 | scenario 'stylesheets assets files are added' do 5 | application_css_file = IO.read("#{dummy_app_path}/app/assets/stylesheets/application.css") 6 | 7 | expect(File).to exist("#{dummy_app_path}/app/assets/stylesheets/_settings.scss") 8 | expect(File).to exist("#{dummy_app_path}/app/assets/stylesheets/foundation_and_overrides.scss") 9 | expect(application_css_file).to match(/require foundation_and_overrides/) 10 | end 11 | 12 | scenario 'javascripts assets files are added' do 13 | application_js_file = IO.read("#{dummy_app_path}/app/assets/javascripts/application.js") 14 | 15 | expect(application_js_file).to match(/require foundation/) 16 | expect(application_js_file).to match(Regexp.new(Regexp.escape('$(function(){ $(document).foundation(); });'))) 17 | end 18 | 19 | scenario 'layout file loads assets' do 20 | layout_file = IO.read("#{dummy_app_path}/app/views/layouts/application.html.erb") 21 | 22 | expect(layout_file).to match(/stylesheet_link_tag "application"/) 23 | expect(layout_file).to match(/javascript_include_tag "application/) 24 | end 25 | end 26 | -------------------------------------------------------------------------------- /vendor/assets/scss/prototype/_shadow.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-shadow 7 | //// 8 | 9 | /// Responsive breakpoints for shadow utility. 10 | /// @type Boolean 11 | $prototype-shadow-breakpoints: $global-prototype-breakpoints !default; 12 | 13 | /// Default value for `prototype-box-shadow` 14 | /// @type Number 15 | $prototype-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12) !default; 16 | 17 | /// Shadow Utility: Adds a light box shadow to an element by default. 18 | /// @param {Number} $shadow [$prototype-box-shadow] Box Shadow of a component 19 | @mixin shadow( 20 | $shadow: $prototype-box-shadow 21 | ) { 22 | box-shadow: $shadow; 23 | } 24 | 25 | @mixin foundation-prototype-shadow { 26 | .shadow { 27 | @include shadow; 28 | } 29 | 30 | @if ($prototype-shadow-breakpoints) { 31 | // Loop through Responsive Breakpoints 32 | @each $size in $breakpoint-classes { 33 | @include breakpoint($size) { 34 | @if $size != $-zf-zero-breakpoint { 35 | .#{$size}-shadow { 36 | @include shadow; 37 | } 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /vendor/assets/scss/motion-ui/util/_string.scss: -------------------------------------------------------------------------------- 1 | /// Convert any string to a "safe" string that can be used anywhere in CSS (as class or keyframe name for example). 2 | /// Unsupported characters are replaced by the given `$delimiter` ("-"). 3 | /// Several unsupported characters following each others are replaced by a single delimiter. 4 | /// 5 | /// @param {*} $str - String to convert. If not a string, it will be converted to with `quote()`. 6 | /// @param {String} $delimiter ['-'] - Character to use instead of unsupported characters. 7 | /// @return {String} - Safe string usable everywhere in CSS. 8 | @function -mui-string-safe( 9 | $str, 10 | $delimiter: '-' 11 | ) { 12 | $str: quote($str); 13 | $length: str_length($str); 14 | $safe-chars: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'; 15 | 16 | $ret: ''; 17 | $delimited: false; 18 | 19 | @for $i from 1 through $length { 20 | $c: str_slice($str, $i, $i); 21 | 22 | @if (str_index($safe-chars, $c) != null) { 23 | $ret: '#{$ret}#{$c}'; 24 | $delimited: false; 25 | } 26 | @else if (($delimited == false) 27 | and (str_length($ret) > 0) 28 | and ($i < $length)) 29 | { 30 | $ret: '#{$ret}#{$delimiter}'; 31 | $delimited: true; 32 | } 33 | } 34 | 35 | @return $ret; 36 | } 37 | -------------------------------------------------------------------------------- /vendor/assets/scss/forms/_fieldset.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group forms 7 | //// 8 | 9 | /// Default border around custom fieldsets. 10 | /// @type Border 11 | $fieldset-border: 1px solid $medium-gray !default; 12 | 13 | /// Default padding inside custom fieldsets. 14 | /// @type Number 15 | $fieldset-padding: rem-calc(20) !default; 16 | 17 | /// Default margin around custom fieldsets. 18 | /// @type Number 19 | $fieldset-margin: rem-calc(18 0) !default; 20 | 21 | /// Default padding between the legend text and fieldset border. 22 | /// @type Number 23 | $legend-padding: rem-calc(0 3) !default; 24 | 25 | @mixin fieldset { 26 | margin: $fieldset-margin; 27 | padding: $fieldset-padding; 28 | border: $fieldset-border; 29 | 30 | legend { 31 | // Covers up the fieldset's border to create artificial padding 32 | margin: 0; 33 | margin-#{$global-left}: rem-calc(-3); 34 | padding: $legend-padding; 35 | } 36 | } 37 | 38 | @mixin foundation-form-fieldset { 39 | fieldset { 40 | margin: 0; 41 | padding: 0; 42 | border: 0; 43 | } 44 | 45 | legend { 46 | max-width: 100%; 47 | margin-bottom: $form-spacing * 0.5; 48 | } 49 | 50 | .fieldset { 51 | @include fieldset; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /vendor/assets/scss/motion-ui/transitions/_fade.scss: -------------------------------------------------------------------------------- 1 | /// Creates a fade transition by adjusting the opacity of the element. 2 | /// @param {Keyword} $state [in] - State to transition to. 3 | /// @param {Number} $from [null] - Opacity to start at. Must be a number between 0 and 1. By default `0` and `1` for `in` and `out` states respectively. 4 | /// @param {Number} $to [null] - Opacity to end on. By default `1` and `0` for `in` and `out` states respectively. 5 | /// @param {Keyword} $duration [null] - Length (speed) of the transition. 6 | /// @param {Keyword|Function} $timing [null] - Easing of the transition. 7 | /// @param {Duration} $delay [null] - Delay in seconds or milliseconds before the transition starts. 8 | @mixin mui-fade( 9 | $state: in, 10 | $from: null, 11 | $to: null, 12 | $duration: null, 13 | $timing: null, 14 | $delay: null 15 | ) { 16 | $from: if($from != null, $from, if($state == in, 0, 1)); 17 | $to: if($to != null, $to, if($state == in, 1, 0)); 18 | $fade: fade($from, $to); 19 | 20 | @include transition-start($state) { 21 | @include transition-basics($duration, $timing, $delay); 22 | @include -mui-keyframe-get($fade, 0); 23 | 24 | transition-property: opacity; 25 | } 26 | 27 | @include transition-end($state) { 28 | @include -mui-keyframe-get($fade, 100); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /vendor/assets/scss/forms/_label.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group forms 7 | //// 8 | 9 | /// Color for form labels. 10 | /// @type Color 11 | $form-label-color: $black !default; 12 | 13 | /// Font size for form labels. 14 | /// @type Number 15 | $form-label-font-size: rem-calc(14) !default; 16 | 17 | /// Font weight for form labels. 18 | /// @type Keyword 19 | $form-label-font-weight: $global-weight-normal !default; 20 | 21 | /// Line height for form labels. The higher the number, the more space between the label and its input field. 22 | /// @type Number 23 | $form-label-line-height: 1.8 !default; 24 | 25 | @mixin form-label { 26 | display: block; 27 | margin: 0; 28 | 29 | font-size: $form-label-font-size; 30 | font-weight: $form-label-font-weight; 31 | line-height: $form-label-line-height; 32 | color: $form-label-color; 33 | } 34 | 35 | @mixin form-label-middle { 36 | $input-border-width: get-border-value($input-border, width); 37 | 38 | margin: 0 0 $form-spacing; 39 | line-height: $global-lineheight; 40 | padding: ($form-spacing * 0.5 + rem-calc($input-border-width)) 0; 41 | } 42 | 43 | @mixin foundation-form-label { 44 | label { 45 | @include form-label; 46 | 47 | &.middle { 48 | @include form-label-middle; 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /foundation-rails.gemspec: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | lib = File.expand_path('../lib', __FILE__) 3 | $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) 4 | require 'foundation/rails/version' 5 | 6 | Gem::Specification.new do |spec| 7 | spec.name = "foundation-rails" 8 | spec.version = Foundation::Rails::VERSION 9 | spec.authors = ["Yetinauts"] 10 | spec.email = ["contact@get.foundation"] 11 | spec.description = %q{Foundation on Sass/Compass} 12 | spec.summary = %q{Foundation on Sass/Compass} 13 | spec.homepage = "https://get.foundation" 14 | spec.license = "MIT" 15 | 16 | spec.files = `git ls-files`.split($/) 17 | spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } 18 | spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) 19 | spec.require_paths = ["lib"] 20 | 21 | spec.add_dependency "sassc" 22 | spec.add_dependency "railties", [">= 3.1.0"] 23 | spec.add_dependency "sprockets-es6" 24 | 25 | spec.add_development_dependency "bundler" 26 | spec.add_development_dependency "capybara" 27 | spec.add_development_dependency "rake" 28 | spec.add_development_dependency "rspec" 29 | spec.add_development_dependency "appraisal" 30 | 31 | # Required by dummy app 32 | spec.add_development_dependency "bootsnap" 33 | spec.add_development_dependency "listen" 34 | end 35 | -------------------------------------------------------------------------------- /vendor/assets/scss/prototype/_display.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-display 7 | //// 8 | 9 | /// Responsive breakpoints for display classes 10 | /// @type Boolean 11 | $prototype-display-breakpoints: $global-prototype-breakpoints !default; 12 | 13 | /// Map containing all the `display` classes 14 | /// @type Map 15 | $prototype-display: ( 16 | inline, 17 | inline-block, 18 | block, 19 | table, 20 | table-cell 21 | ) !default; 22 | 23 | /// Display classes, by default coming through a map `$prototype-display` 24 | /// @param {String} $display [] Display classes 25 | @mixin display($display) { 26 | display: $display !important; 27 | } 28 | 29 | @mixin foundation-prototype-display { 30 | @each $display in $prototype-display { 31 | .display-#{$display} { 32 | @include display($display); 33 | } 34 | } 35 | 36 | @if ($prototype-display-breakpoints) { 37 | // Loop through Responsive Breakpoints 38 | @each $size in $breakpoint-classes { 39 | @include breakpoint($size) { 40 | @each $display in $prototype-display { 41 | @if $size != $-zf-zero-breakpoint { 42 | .#{$size}-display-#{$display} { 43 | @include display($display); 44 | } 45 | } 46 | } 47 | } 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /vendor/assets/scss/motion-ui/effects/_slide.scss: -------------------------------------------------------------------------------- 1 | /// Creates a sliding animation. 2 | /// @param {Keyword} $state [in] - Whether to move to (`in`) or from (`out`) the element's default position. 3 | /// @param {Keyword} $direction [null] - Direction to move. Can be `up`, `right`, `down`, or `left`. By default `left` and `right` for `in` and `out` states respectively. 4 | /// @param {Number} $amount [100%] - Distance to move. Can be any CSS length unit. 5 | /// @return {Map} A keyframes map that can be used with the `generate-keyframes()` mixin. 6 | @function slide( 7 | $state: in, 8 | $direction: null, 9 | $amount: 100% 10 | ) { 11 | $from: $amount; 12 | $to: 0; 13 | $func: 'translateY'; 14 | $direction: if($direction != null, $direction, if($state == in, left, right)); 15 | 16 | @if $direction == left or $direction == right { 17 | $func: 'translateX'; 18 | } 19 | 20 | @if $state == out { 21 | $from: 0; 22 | $to: $amount; 23 | } 24 | 25 | @if $direction == down or $direction == right { 26 | @if $state == in { 27 | $from: -$from; 28 | } 29 | } @else { 30 | @if $state == out { 31 | $to: -$to; 32 | } 33 | } 34 | 35 | $keyframes: ( 36 | name: -mui-string-safe('slide-#{$state}-#{$direction}-#{$amount}'), 37 | 0: (transform: '#{$func}(#{$from})'), 38 | 100: (transform: '#{$func}(#{$to})'), 39 | ); 40 | 41 | @return $keyframes; 42 | } 43 | -------------------------------------------------------------------------------- /vendor/assets/scss/prototype/_text-decoration.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-text-decoration 7 | //// 8 | 9 | /// Responsive breakpoints for text decoration classes 10 | /// @type Boolean 11 | $prototype-decoration-breakpoints: $global-prototype-breakpoints !default; 12 | 13 | /// Map containing all the `text-decoration` classes 14 | /// @type Map 15 | $prototype-text-decoration: ( 16 | overline, 17 | underline, 18 | line-through, 19 | ) !default; 20 | 21 | /// Text Decoration, by default coming through a map `$prototype-text-decoration` 22 | /// @param {String} $decoration [] Text Decoration 23 | @mixin text-decoration($decoration) { 24 | text-decoration: $decoration !important; 25 | } 26 | 27 | @mixin foundation-prototype-text-decoration { 28 | @each $decoration in $prototype-text-decoration { 29 | .text-#{$decoration} { 30 | @include text-decoration($decoration); 31 | } 32 | } 33 | 34 | @if ($prototype-decoration-breakpoints) { 35 | // Loop through Responsive Breakpoints 36 | @each $size in $breakpoint-classes { 37 | @include breakpoint($size) { 38 | @each $decoration in $prototype-text-decoration { 39 | @if $size != $-zf-zero-breakpoint { 40 | .#{$size}-text-#{$decoration} { 41 | @include text-decoration($decoration); 42 | } 43 | } 44 | } 45 | } 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /vendor/assets/scss/grid/_grid.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group grid 7 | //// 8 | 9 | /// The maximum width of a row. 10 | /// @type Number 11 | $grid-row-width: $global-width !default; 12 | 13 | /// The default column count of a grid. Changing this value affects the logic of the grid mixins, and the number of CSS classes output. 14 | /// @type Number 15 | $grid-column-count: 12 !default; 16 | 17 | /// The amount of space between columns at different screen sizes. To use just one size, set the variable to a number instead of a map. 18 | /// @type Map | Length 19 | /// @since 6.1.0 20 | $grid-column-gutter: ( 21 | small: 20px, 22 | medium: 30px, 23 | ) !default; 24 | 25 | /// If `true`, the last column in a row will align to the opposite edge of the row. 26 | /// @type Boolean 27 | $grid-column-align-edge: true !default; 28 | 29 | /// Selector used for an alias of column (with @extend). If `false`, no alias is created. 30 | /// @type String 31 | $grid-column-alias: 'columns' !default; 32 | 33 | /// The highest number of `.x-up` classes available when using the block grid CSS. 34 | /// @type Number 35 | $block-grid-max: 8 !default; 36 | 37 | // Internal value to store the end column float direction 38 | $-zf-end-float: if($grid-column-align-edge, $global-right, $global-left); 39 | 40 | @import 'row'; 41 | @import 'column'; 42 | @import 'size'; 43 | @import 'position'; 44 | @import 'gutter'; 45 | @import 'classes'; 46 | @import 'layout'; 47 | 48 | @import 'flex-grid'; 49 | -------------------------------------------------------------------------------- /vendor/assets/scss/prototype/_text-transformation.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-text-transformation 7 | //// 8 | 9 | /// Responsive breakpoints for text transformation classes 10 | /// @type Boolean 11 | $prototype-transformation-breakpoints: $global-prototype-breakpoints !default; 12 | 13 | /// Map containing all the `text-transformation` classes 14 | /// @type Map 15 | $prototype-text-transformation: ( 16 | lowercase, 17 | uppercase, 18 | capitalize 19 | ) !default; 20 | 21 | /// Text Transformation, by default coming through a map `$prototype-text-transformation` 22 | /// @param {String} $transformation [] Text Transformation 23 | @mixin text-transform($transformation) { 24 | text-transform: $transformation !important; 25 | } 26 | 27 | @mixin foundation-prototype-text-transformation { 28 | @each $transformation in $prototype-text-transformation { 29 | .text-#{$transformation} { 30 | @include text-transform($transformation); 31 | } 32 | } 33 | 34 | @if ($prototype-transformation-breakpoints) { 35 | // Loop through Responsive Breakpoints 36 | @each $size in $breakpoint-classes { 37 | @include breakpoint($size) { 38 | @each $transformation in $prototype-text-transformation { 39 | @if $size != $-zf-zero-breakpoint { 40 | .#{$size}-text-#{$transformation} { 41 | @include text-transform($transformation); 42 | } 43 | } 44 | } 45 | } 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /vendor/assets/scss/components/_progress-bar.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | /// Adds styles for a progress bar container. 6 | @mixin progress-container { 7 | height: $progress-height; 8 | margin-bottom: $progress-margin-bottom; 9 | border-radius: $progress-radius; 10 | background-color: $progress-background; 11 | } 12 | 13 | /// Adds styles for the inner meter of a progress bar. 14 | @mixin progress-meter { 15 | position: relative; 16 | display: block; 17 | width: 0%; 18 | height: 100%; 19 | background-color: $progress-meter-background; 20 | 21 | @if has-value($progress-radius) { 22 | border-radius: $global-radius; 23 | } 24 | } 25 | 26 | /// Adds styles for text in the progress meter. 27 | @mixin progress-meter-text { 28 | @include absolute-center; 29 | margin: 0; 30 | font-size: 0.75rem; 31 | font-weight: bold; 32 | color: $white; 33 | white-space: nowrap; 34 | 35 | @if has-value($progress-radius) { 36 | border-radius: $progress-radius; 37 | } 38 | } 39 | 40 | @mixin foundation-progress-bar { 41 | // Progress bar 42 | .progress { 43 | @include progress-container; 44 | 45 | @each $name, $color in $foundation-palette { 46 | &.#{"" + $name} { 47 | .progress-meter { 48 | background-color: $color; 49 | } 50 | } 51 | } 52 | } 53 | 54 | // Inner meter 55 | .progress-meter { 56 | @include progress-meter; 57 | } 58 | 59 | // Inner meter text 60 | .progress-meter-text { 61 | @include progress-meter-text; 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /vendor/assets/scss/xy-grid/_xy-grid.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group xy-grid 7 | //// 8 | 9 | /// Enables the XY grid. 10 | /// @type Boolean 11 | $xy-grid: true !default; 12 | 13 | /// The maximum width of a grid container. 14 | /// @type Number 15 | $grid-container: $global-width !default; 16 | 17 | /// The number of columns used in the grid. 18 | /// @type Number 19 | $grid-columns: 12 !default; 20 | 21 | /// The amount of margin between cells at different screen sizes when using the margin grid. To use just one size, set the variable to a number instead of a map. 22 | /// @type Map | Length 23 | $grid-margin-gutters: ( 24 | "small": 20px, 25 | "medium": 30px 26 | ) !default; 27 | 28 | /// The amount of padding in cells at different screen sizes when using the padding grid. To use just one size, set the variable to a number instead of a map. 29 | /// @type Map | Length 30 | $grid-padding-gutters: $grid-margin-gutters !default; 31 | 32 | /// The amount of padding to use when padding the grid-container. 33 | /// @type Map | Length 34 | $grid-container-padding: $grid-padding-gutters !default; 35 | 36 | /// The maximum width to apply to a grid container 37 | /// @type Number 38 | $grid-container-max: $global-width !default; 39 | 40 | /// The maximum number of cells in an XY block grid. 41 | /// @type Number 42 | $xy-block-grid-max: 8 !default; 43 | 44 | @import 'gutters'; 45 | @import 'grid'; 46 | @import 'cell'; 47 | @import 'frame'; 48 | @import 'position'; 49 | @import 'layout'; 50 | @import 'collapse'; 51 | @import 'classes'; 52 | -------------------------------------------------------------------------------- /vendor/assets/scss/components/_badge.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group badge 7 | //// 8 | 9 | /// Default background color for badges. 10 | /// @type Color 11 | $badge-background: $primary-color !default; 12 | 13 | /// Default text color for badges. 14 | /// @type Color 15 | $badge-color: $white !default; 16 | 17 | /// Alternate text color for badges. 18 | /// @type Color 19 | $badge-color-alt: $black !default; 20 | 21 | /// Coloring classes. A map of classes to output in your CSS, like `.secondary`, `.success`, and so on. 22 | /// @type Map 23 | $badge-palette: $foundation-palette !default; 24 | 25 | /// Default padding inside badges. 26 | /// @type Number 27 | $badge-padding: 0.3em !default; 28 | 29 | /// Minimum width of a badge. 30 | /// @type Number 31 | $badge-minwidth: 2.1em !default; 32 | 33 | /// Default font size for badges. 34 | /// @type Number 35 | $badge-font-size: 0.6rem !default; 36 | 37 | /// Generates the base styles for a badge. 38 | @mixin badge { 39 | display: inline-block; 40 | min-width: $badge-minwidth; 41 | padding: $badge-padding; 42 | 43 | border-radius: 50%; 44 | 45 | font-size: $badge-font-size; 46 | text-align: center; 47 | } 48 | 49 | @mixin foundation-badge { 50 | .badge { 51 | @include badge; 52 | 53 | background: $badge-background; 54 | color: $badge-color; 55 | 56 | @each $name, $color in $badge-palette { 57 | &.#{"" + $name} { 58 | background: $color; 59 | color: color-pick-contrast($color, ($badge-color, $badge-color-alt)); 60 | } 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /vendor/assets/scss/motion-ui/util/_transition.scss: -------------------------------------------------------------------------------- 1 | /// Applies basic transition settings to an element. 2 | /// @param {Duration} $duration [null] - Length (speed) of the transition. 3 | /// @param {Keyword|Function} $timing [null] - Easing of the transition. 4 | /// @param {Duration} $delay [null] - Delay in seconds or milliseconds before the transition starts. 5 | @mixin transition-basics( 6 | $duration: null, 7 | $timing: null, 8 | $delay: null 9 | ) { 10 | @include -motion-ui-defaults; 11 | transition-duration: $duration; 12 | transition-timing-function: $timing; 13 | transition-delay: $delay; 14 | } 15 | 16 | /// Wraps the content in the setup class for a transition. 17 | /// @param {Keyword} $dir - State to setup for transition. 18 | @mixin transition-start($dir) { 19 | $selector: -mui-build-selector(map-get($motion-ui-states, $dir)); 20 | 21 | @at-root { 22 | #{$selector} { 23 | @content; 24 | } 25 | } 26 | } 27 | 28 | /// Wraps the content in the active class for a transition. 29 | /// @param {Keyword} $dir - State to activate a transition on. 30 | @mixin transition-end($dir) { 31 | $selector: -mui-build-selector(map-get($motion-ui-states, $dir), true); 32 | 33 | @at-root { 34 | #{$selector} { 35 | @content; 36 | } 37 | } 38 | } 39 | 40 | /// Adds styles for a stagger animation, which can be used with Angular's `ng-repeat`. 41 | /// @param {Duration} $delay-amount - Amount of time in seconds or milliseconds to add between each item's animation. 42 | @mixin stagger($delay-amount) { 43 | transition-delay: $delay-amount; 44 | transition-duration: 0; // Prevent accidental CSS inheritance 45 | } 46 | -------------------------------------------------------------------------------- /vendor/assets/scss/components/_responsive-embed.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group responsive-embed 7 | //// 8 | 9 | /// Margin below a responsive embed container. 10 | /// @type Number 11 | $responsive-embed-margin-bottom: rem-calc(16) !default; 12 | 13 | /// Aspect ratios used to determine padding-bottom of responsive embed containers. 14 | /// @type Map 15 | $responsive-embed-ratios: ( 16 | default: 4 by 3, 17 | widescreen: 16 by 9, 18 | ) !default; 19 | 20 | /// Creates a responsive embed container. 21 | /// @param {String|List} $ratio [default] - Ratio of the container. Can be a key from the `$responsive-embed-ratios` map or a list formatted as `x by y`. 22 | @mixin responsive-embed($ratio: default) { 23 | @if type-of($ratio) == 'string' { 24 | $ratio: map-get($responsive-embed-ratios, $ratio); 25 | } 26 | position: relative; 27 | height: 0; 28 | margin-bottom: $responsive-embed-margin-bottom; 29 | padding-bottom: ratio-to-percentage($ratio); 30 | overflow: hidden; 31 | 32 | iframe, 33 | object, 34 | embed, 35 | video { 36 | position: absolute; 37 | top: 0; 38 | #{$global-left}: 0; 39 | width: 100%; 40 | height: 100%; 41 | } 42 | } 43 | 44 | @mixin foundation-responsive-embed { 45 | .responsive-embed, 46 | .flex-video { 47 | @include responsive-embed($ratio: default); 48 | 49 | $ratios: map-remove($responsive-embed-ratios, default); 50 | 51 | @each $name, $ratio in $ratios { 52 | &.#{$name} { 53 | padding-bottom: ratio-to-percentage($ratio); 54 | } 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /vendor/assets/scss/components/_label.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group label 7 | //// 8 | 9 | /// Default background color for labels. 10 | /// @type Color 11 | $label-background: $primary-color !default; 12 | 13 | /// Default text color for labels. 14 | /// @type Color 15 | $label-color: $white !default; 16 | 17 | /// Alternate text color for labels. 18 | /// @type Color 19 | $label-color-alt: $black !default; 20 | 21 | /// Coloring classes. A map of classes to output in your CSS, like `.secondary`, `.success`, and so on. 22 | /// @type Map 23 | $label-palette: $foundation-palette !default; 24 | 25 | /// Default font size for labels. 26 | /// @type Number 27 | $label-font-size: 0.8rem !default; 28 | 29 | /// Default padding inside labels. 30 | /// @type Number 31 | $label-padding: 0.33333rem 0.5rem !default; 32 | 33 | /// Default radius of labels. 34 | /// @type Number 35 | $label-radius: $global-radius !default; 36 | 37 | /// Generates base styles for a label. 38 | @mixin label { 39 | display: inline-block; 40 | padding: $label-padding; 41 | 42 | border-radius: $label-radius; 43 | 44 | font-size: $label-font-size; 45 | line-height: 1; 46 | white-space: nowrap; 47 | cursor: default; 48 | } 49 | 50 | @mixin foundation-label { 51 | .label { 52 | @include label; 53 | 54 | background: $label-background; 55 | color: $label-color; 56 | 57 | @each $name, $color in $label-palette { 58 | &.#{"" + $name} { 59 | background: $color; 60 | color: color-pick-contrast($color, ($label-color, $label-color-alt)); 61 | } 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /vendor/assets/scss/components/_thumbnail.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group thumbnail 7 | //// 8 | 9 | /// Border around thumbnail images. 10 | /// @type Border 11 | $thumbnail-border: 4px solid $white !default; 12 | 13 | /// Bottom margin for thumbnail images. 14 | /// @type Length 15 | $thumbnail-margin-bottom: $global-margin !default; 16 | 17 | /// Box shadow under thumbnail images. 18 | /// @type Shadow 19 | $thumbnail-shadow: 0 0 0 1px rgba($black, 0.2) !default; 20 | 21 | /// Box shadow under thumbnail images. 22 | /// @type Shadow 23 | $thumbnail-shadow-hover: 0 0 6px 1px rgba($primary-color, 0.5) !default; 24 | 25 | /// Transition proprties for thumbnail images. 26 | /// @type Transition 27 | $thumbnail-transition: box-shadow 200ms ease-out !default; 28 | 29 | /// Default radius for thumbnail images. 30 | /// @type Number 31 | $thumbnail-radius: $global-radius !default; 32 | 33 | /// Adds thumbnail styles to an element. 34 | @mixin thumbnail { 35 | display: inline-block; 36 | max-width: 100%; 37 | margin-bottom: $thumbnail-margin-bottom; 38 | 39 | border: $thumbnail-border; 40 | border-radius: $thumbnail-radius; 41 | box-shadow: $thumbnail-shadow; 42 | 43 | line-height: 0; 44 | } 45 | 46 | @mixin thumbnail-link { 47 | transition: $thumbnail-transition; 48 | 49 | &:hover, 50 | &:focus { 51 | box-shadow: $thumbnail-shadow-hover; 52 | } 53 | 54 | image { 55 | box-shadow: none; 56 | } 57 | } 58 | 59 | @mixin foundation-thumbnail { 60 | .thumbnail { 61 | @include thumbnail; 62 | } 63 | 64 | a.thumbnail { 65 | @include thumbnail-link; 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /vendor/assets/scss/prototype/_bordered.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-bordered 7 | //// 8 | 9 | /// Responsive breakpoints for bordered utility. 10 | /// @type Boolean 11 | $prototype-bordered-breakpoints: $global-prototype-breakpoints !default; 12 | 13 | /// Default value for `prototype-border-width` 14 | /// @type Number 15 | $prototype-border-width: rem-calc(1) !default; 16 | 17 | /// Default value for `prototype-border-type` 18 | /// @type String 19 | $prototype-border-type: solid !default; 20 | 21 | /// Default value for `prototype-border-color` defaulted to `medium-gray` 22 | /// @type Color 23 | $prototype-border-color: $medium-gray !default; 24 | 25 | /// Bordered Utility: Adds a light border to an element by default. 26 | /// @param {Number} $width [$prototype-border-width] Width of the border 27 | /// @param {String} $type [$prototype-border-type] Type of the border 28 | /// @param {Color} $color [$prototype-border-color] Color of the border 29 | @mixin bordered( 30 | $width: $prototype-border-width, 31 | $type: $prototype-border-type, 32 | $color: $prototype-border-color 33 | ) { 34 | border: $width $type $color; 35 | } 36 | 37 | @mixin foundation-prototype-bordered { 38 | .bordered { 39 | @include bordered; 40 | } 41 | 42 | @if ($prototype-bordered-breakpoints) { 43 | // Loop through Responsive Breakpoints 44 | @each $size in $breakpoint-classes { 45 | @include breakpoint($size) { 46 | @if $size != $-zf-zero-breakpoint { 47 | .#{$size}-bordered { 48 | @include bordered; 49 | } 50 | } 51 | } 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /vendor/assets/scss/xy-grid/_gutters.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group xy-grid 7 | //// 8 | 9 | /// Create gutters for a cell/container. 10 | /// 11 | /// @param {Number|Map} $gutters [$grid-margin-gutters] - Map or single value for gutters. 12 | /// @param {Keyword} $gutter-type [margin] - Type of gutter to output. Accepts either margin or padding. 13 | /// @param {List} $gutter-position [right left] - The position to apply gutters to. Accepts `top`, `bottom`, `left`, `right` in any combination. 14 | /// @param {Boolean} $negative [false] - Whether to apply the gutter as a negative value. Commonly used for nested grids. 15 | @mixin xy-gutters( 16 | $gutters: $grid-margin-gutters, 17 | $gutter-type: margin, 18 | $gutter-position: right left, 19 | $negative: false 20 | ) { 21 | $operator: if($negative, '-', ''); 22 | 23 | // If we have declared negative gutters, force type to `margin. 24 | $gutter-type: if($negative, 'margin', $gutter-type); 25 | 26 | // Output our margin gutters. 27 | @if (type-of($gutters) == 'map') { 28 | @include -zf-breakpoint-value(auto, $gutters) { 29 | $gutter: rem-calc($-zf-bp-value) * 0.5; 30 | 31 | // Loop through each gutter position 32 | @each $value in $gutter-position { 33 | #{$gutter-type}-#{$value}: unquote("#{$operator}#{$gutter}"); 34 | } 35 | } 36 | } 37 | @else if (type-of($gutters) == 'number') { 38 | $gutter: rem-calc($gutters) * 0.5; 39 | 40 | // Loop through each gutter position 41 | @each $value in $gutter-position { 42 | #{$gutter-type}-#{$value}: unquote("#{$operator}#{$gutter}"); 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | require 'bundler/setup' 2 | require 'bundler/gem_tasks' 3 | require 'rspec/core/rake_task' 4 | 5 | RSpec::Core::RakeTask.new(:rspec) 6 | 7 | desc 'Run the test suite' 8 | task :default => :rspec 9 | 10 | namespace :assets do 11 | desc 'Update Foundation for Sites assets' 12 | task update: :clean do 13 | sh 'bower install' 14 | sh 'cp -R bower_components/foundation-sites/dist/js/* vendor/assets/js/' 15 | sh 'rm -f vendor/assets/js/foundation.d.ts' 16 | sh 'cp -R bower_components/foundation-sites/scss/* vendor/assets/scss/' 17 | sh 'cp -R bower_components/foundation-sites/scss/settings/_settings.scss lib/generators/foundation/templates' 18 | sh 'cp -R bower_components/foundation-sites/_vendor/* vendor/assets/_vendor/' 19 | sh 'cp -R bower_components/motion-ui/src/* vendor/assets/scss/motion-ui' 20 | 21 | puts "" 22 | puts "********************************************************************************" 23 | puts "** ASSETS UPDATED! **" 24 | puts "********************************************************************************" 25 | puts " " 26 | puts " You may need to update the list of plugins you " 27 | puts " want to import in \"foundation.sprockets.js\" " 28 | puts " " 29 | 30 | end 31 | 32 | desc 'Remove old Foundation for Sites assets' 33 | task :clean do 34 | sh 'rm -rf vendor' 35 | sh 'mkdir -p vendor/assets/js/ vendor/assets/scss vendor/assets/scss/motion-ui vendor/assets/_vendor' 36 | end 37 | 38 | end 39 | -------------------------------------------------------------------------------- /vendor/assets/scss/motion-ui/transitions/_spin.scss: -------------------------------------------------------------------------------- 1 | /// Creates a spinning transition by rotating the element. The `turn` unit is used to specify how far to rotate. `1turn` is equal to a 360-degree spin. 2 | /// @param {Keyword} $state [in] - State to transition to. 3 | /// @param {Keyword} $direction [null] - Direction to spin. Should be `cw` (clockwise) or `ccw` (counterclockwise). By default `cw` and `ccw` for `in` and `out` states respectively. 4 | /// @param {Number} $amount [0.75turn] - Amount to element the element. 5 | /// @param {Boolean} $fade [false] - Set to `true` to fade the element in or out simultaneously. 6 | /// @param {Duration} $duration [null] - Length (speed) of the transition. 7 | /// @param {Keyword|Function} $timing [null] - Easing of the transition. 8 | /// @param {Duration} $delay [null] - Delay in seconds or milliseconds before the transition starts. 9 | @mixin mui-spin( 10 | $state: in, 11 | $direction: cw, 12 | $amount: 0.75turn, 13 | $fade: map-get($motion-ui-settings, spin-and-fade), 14 | $duration: null, 15 | $timing: null, 16 | $delay: null 17 | ) { 18 | $direction: if($direction != null, $direction, if($state == in, cw, ccw)); 19 | $spin: spin($state, $direction, $amount); 20 | 21 | @include transition-start($state) { 22 | @include transition-basics($duration, $timing, $delay); 23 | @include -mui-keyframe-get($spin, 0); 24 | 25 | @if $fade { 26 | transition-property: transform, opacity; 27 | opacity: if($state == in, 0, 1); 28 | } @else { 29 | transition-property: transform, opacity; 30 | } 31 | } 32 | 33 | @include transition-end($state) { 34 | @include -mui-keyframe-get($spin, 100); 35 | 36 | @if $fade { 37 | opacity: if($state == in, 1, 0); 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /vendor/assets/scss/prototype/_rounded.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-rounded 7 | //// 8 | 9 | /// Responsive breakpoints for rounded utility. 10 | /// @type Boolean 11 | $prototype-rounded-breakpoints: $global-prototype-breakpoints !default; 12 | 13 | /// Default value for `prototype-border-radius` 14 | /// @type Number 15 | $prototype-border-radius: rem-calc(3) !default; 16 | 17 | /// Rounded utility (all corners): Adds radius corners (all corners) to an element by default. 18 | /// @param {Number} $radius [$prototype-border-radius] Border radius (all corners) 19 | @mixin border-radius( 20 | $radius: $prototype-border-radius 21 | ) { 22 | border-radius: $radius; 23 | } 24 | 25 | /// Rounded square utility or rectangle utility (all corners): Rounds all corners to an element by default to make a pill shape. 26 | @mixin border-rounded { 27 | border-radius: 5000px !important; 28 | } 29 | 30 | @mixin foundation-prototype-rounded { 31 | .rounded { 32 | @include border-rounded; 33 | 34 | .switch-paddle { 35 | @include border-rounded; 36 | &:after { 37 | border-radius: 50%; // For switches 38 | } 39 | } 40 | } 41 | 42 | .radius { 43 | @include border-radius; 44 | } 45 | 46 | @if ($prototype-rounded-breakpoints) { 47 | // Loop through Responsive Breakpoints 48 | @each $size in $breakpoint-classes { 49 | @include breakpoint($size) { 50 | @if $size != $-zf-zero-breakpoint { 51 | .#{$size}-rounded { 52 | @include border-rounded; 53 | } 54 | .#{$size}-radius { 55 | @include border-radius; 56 | } 57 | } 58 | } 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /vendor/assets/scss/motion-ui/transitions/_slide.scss: -------------------------------------------------------------------------------- 1 | /// Creates a sliding transition by translating the element horizontally or vertically. 2 | /// @param {Keyword} $state [in] - State to transition to. 3 | /// @param {Keyword} $direction [null] - Direction to slide to. Can be `up`, `right`, `down`, or `left`. By default `left` and `right` for `in` and `out` states respectively. 4 | /// @param {Length} $amount [100%] - Length of the slide as a percentage value. 5 | /// @param {Boolean} $fade [false] - Set to `true` to fade the element in or out simultaneously. 6 | /// @param {Duration} $duration [null] - Length (speed) of the transition. 7 | /// @param {Keyword|Function} $timing [null] - Easing of the transition. 8 | /// @param {Duration} $delay [null] - Delay in seconds or milliseconds before the transition starts. 9 | @mixin mui-slide ( 10 | $state: in, 11 | $direction: null, 12 | $amount: 100%, 13 | $fade: map-get($motion-ui-settings, slide-and-fade), 14 | $duration: null, 15 | $timing: null, 16 | $delay: null 17 | ) { 18 | $direction: if($direction != null, $direction, if($state == in, left, right)); 19 | $slide: slide($state, $direction, $amount); 20 | 21 | // CSS Output 22 | @include transition-start($state) { 23 | @include transition-basics($duration, $timing, $delay); 24 | @include -mui-keyframe-get($slide, 0); 25 | 26 | @if $fade { 27 | transition-property: transform, opacity; 28 | opacity: if($state == in, 0, 1); 29 | } @else { 30 | transition-property: transform, opacity; 31 | } 32 | 33 | backface-visibility: hidden; 34 | } 35 | 36 | @include transition-end($state) { 37 | @include -mui-keyframe-get($slide, 100); 38 | 39 | @if $fade { 40 | opacity: if($state == in, 1, 0); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /vendor/assets/scss/motion-ui/transitions/_zoom.scss: -------------------------------------------------------------------------------- 1 | /// Creates a scaling transition. A scale of `1` means the element is the same size. Larger numbers make the element bigger, while numbers less than 1 make the element smaller. 2 | /// @param {Keyword} $state [in] - State to transition to. 3 | /// @param {Number} $from [null] - Size to start at. By default `0` and `1` for `in` and `out` states respectively. 4 | /// @param {Number} $to [null] - Size to end at. By default `1` and `0` for `in` and `out` states respectively. 5 | /// @param {Boolean} $fade [true] - Set to `true` to fade the element in or out simultaneously. 6 | /// @param {Duration} $duration [null] - Length (speed) of the transition. 7 | /// @param {Keyword|Function} $timing [null] - Easing of the transition. 8 | /// @param {Duration} $delay [null] - Delay in seconds or milliseconds before the transition starts. 9 | @mixin mui-zoom( 10 | $state: in, 11 | $from: null, 12 | $to: null, 13 | $fade: map-get($motion-ui-settings, scale-and-fade), 14 | $duration: null, 15 | $timing: null, 16 | $delay: null 17 | ) { 18 | $from: if($from != null, $from, if($state == in, 0, 1)); 19 | $to: if($to != null, $to, if($state == in, 1, 0)); 20 | $scale: zoom($from, $to); 21 | 22 | @include transition-start($state) { 23 | @include transition-basics($duration, $timing, $delay); 24 | @include -mui-keyframe-get($scale, 0); 25 | 26 | @if $fade { 27 | transition-property: transform, opacity; 28 | opacity: if($state == in, 0, 1); 29 | } @else { 30 | transition-property: transform, opacity; 31 | } 32 | } 33 | 34 | @include transition-end($state) { 35 | @include -mui-keyframe-get($scale, 100); 36 | 37 | @if $fade { 38 | opacity: if($state == in, 1, 0); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /vendor/assets/js/plugins/foundation.util.imageLoader.min.js: -------------------------------------------------------------------------------- 1 | ((e,o)=>{"object"==typeof exports&&"object"==typeof module?module.exports=o(require("./foundation.core"),require("jquery")):"function"==typeof define&&define.amd?define(["./foundation.core","jquery"],o):"object"==typeof exports?exports.__FOUNDATION_EXTERNAL__=o(require("./foundation.core"),require("jquery")):(e.__FOUNDATION_EXTERNAL__=e.__FOUNDATION_EXTERNAL__||{},e.__FOUNDATION_EXTERNAL__["foundation.util.imageLoader"]=o(e.__FOUNDATION_EXTERNAL__["foundation.core"],e.jQuery))})(self,function(o,n){return r={"./js/foundation.util.imageLoader.js":function(e,o,n){n.r(o),n.d(o,{onImagesLoaded:function(){return t}});var o=n("jquery"),r=n.n(o);function t(e,o){var n=e.length;function t(){0===--n&&o()}0===n&&o(),e.each(function(){var e,o;this.complete&&void 0!==this.naturalWidth?t():(e=new Image,o="load.zf.images error.zf.images",r()(e).one(o,function e(){r()(this).off(o,e),t()}),e.src=r()(this).attr("src"))})}},"./foundation.core":function(e){e.exports=o},jquery:function(e){e.exports=n}},u={},t.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(o,{a:o}),o},t.d=function(e,o){for(var n in o)t.o(o,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:o[n]})},t.o=function(e,o){return Object.prototype.hasOwnProperty.call(e,o)},a={},(t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})})(a),t.d(a,{Foundation:function(){return e.Foundation},onImagesLoaded:function(){return i.onImagesLoaded}}),e=t("./foundation.core"),i=t("./js/foundation.util.imageLoader.js"),e.Foundation.onImagesLoaded=i.onImagesLoaded,a;function t(e){var o=u[e];return void 0!==o||(o=u[e]={exports:{}},r[e](o,o.exports,t)),o.exports}var r,u,e,i,a}); 2 | //# sourceMappingURL=foundation.util.imageLoader.min.js.map 3 | -------------------------------------------------------------------------------- /vendor/assets/scss/prototype/_sizing.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-sizing 7 | //// 8 | 9 | /// Responsive breakpoints for spacing classes (margin and padding) 10 | /// @type Boolean 11 | $prototype-sizing-breakpoints: $global-prototype-breakpoints !default; 12 | 13 | /// Map containing all the `sizing` classes 14 | /// @type Map 15 | $prototype-sizing: ( 16 | width, 17 | height 18 | ) !default; 19 | 20 | /// Map containing all the sizes. 21 | /// @type Map 22 | $prototype-sizes: ( 23 | 25: 25%, 24 | 50: 50%, 25 | 75: 75%, 26 | 100: 100% 27 | ) !default; 28 | 29 | /// Max Width 100 utility. 30 | @mixin max-width-100 { 31 | max-width: 100% !important; 32 | } 33 | 34 | /// Max Height 100 utility. 35 | @mixin max-height-100 { 36 | max-height: 100% !important; 37 | } 38 | 39 | @mixin foundation-prototype-sizing { 40 | // Element Sizing 41 | @each $sizing in $prototype-sizing { 42 | @each $length, $percentage in $prototype-sizes { 43 | .#{$sizing}-#{$length} { 44 | #{$sizing}: $percentage !important; 45 | } 46 | } 47 | } 48 | 49 | // Max width & height 50 | .max-width-100 { 51 | @include max-width-100; 52 | } 53 | .max-height-100 { 54 | @include max-height-100; 55 | } 56 | 57 | @if ($prototype-sizing-breakpoints) { 58 | // Loop through Responsive Breakpoints 59 | @each $size in $breakpoint-classes { 60 | @include breakpoint($size) { 61 | @if $size != $-zf-zero-breakpoint { 62 | @each $sizing in $prototype-sizing { 63 | @each $length, $percentage in $prototype-sizes { 64 | .#{$size}-#{$sizing}-#{$length} { 65 | #{$sizing}: $percentage !important; 66 | } 67 | } 68 | } 69 | } 70 | } 71 | } 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /vendor/assets/scss/xy-grid/_layout.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group xy-grid 7 | //// 8 | 9 | /// Sizes child elements so that `$n` number of items appear on each row. 10 | /// 11 | /// @param {Number} $n - Number of elements to display per row. 12 | /// @param {String} $selector ['.cell'] - Selector(s) to use for child elements. 13 | /// @param {Boolean} $gutter-output [null] - [DEPRECATED] Whether or not to output gutters. 14 | /// @param {Number|Map} $gutters [$grid-margin-gutters] - Map or single value for gutters. 15 | /// @param {Keyword} $gutter-type [margin] - Type of gutter to output. Accepts `margin`, `padding` or `none`. 16 | /// @param {List} $gutter-position [null] - The position to apply gutters to. Accepts `top`, `bottom`, `left`, `right` in any combination. By default `right left` for horizontal cells and `top bottom` for vertical cells. 17 | /// @param {String} $breakpoint [null] - The breakpoint to use for the cell generation. If using with the `breakpoint()` mixin this will be set automatically unless manually entered. 18 | /// @param {Boolean} $vertical [false] - Set to true to output vertical (height) styles rather than widths. 19 | /// @param {List} $output [(base size gutters)] - Cell parts to output. You will need to generate others parts of the cell seperately, it may not work correctly otherwise. 20 | @mixin xy-grid-layout( 21 | $n, 22 | $selector: '.cell', 23 | $gutter-output: null, 24 | $gutters: $grid-margin-gutters, 25 | $gutter-type: margin, 26 | $gutter-position: null, 27 | $breakpoint: null, 28 | $vertical: false, 29 | $output: (base size gutters) 30 | ) { 31 | $size: percentage(divide(1, $n)); 32 | 33 | & > #{$selector} { 34 | @include xy-cell($size, $gutter-output, $gutters, $gutter-type, $gutter-position, $breakpoint, $vertical, $output); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /vendor/assets/js/plugins/foundation.util.timer.min.js: -------------------------------------------------------------------------------- 1 | ((t,e)=>{"object"==typeof exports&&"object"==typeof module?module.exports=e(require("./foundation.core")):"function"==typeof define&&define.amd?define(["./foundation.core"],e):"object"==typeof exports?exports.__FOUNDATION_EXTERNAL__=e(require("./foundation.core")):(t.__FOUNDATION_EXTERNAL__=t.__FOUNDATION_EXTERNAL__||{},t.__FOUNDATION_EXTERNAL__["foundation.util.timer"]=e(t.__FOUNDATION_EXTERNAL__["foundation.core"]))})(self,function(e){return o={"./js/foundation.util.timer.js":function(t,e,o){function n(e,t,o){var n,r,i=this,u=t.duration,a=Object.keys(e.data())[0]||"timer",f=-1;this.isPaused=!1,this.restart=function(){f=-1,clearTimeout(r),this.start()},this.start=function(){this.isPaused=!1,clearTimeout(r),f=f<=0?u:f,e.data("paused",!1),n=Date.now(),r=setTimeout(function(){t.infinite&&i.restart(),o&&"function"==typeof o&&o()},f),e.trigger("timerstart.zf.".concat(a))},this.pause=function(){this.isPaused=!0,clearTimeout(r),e.data("paused",!0);var t=Date.now();f-=t-n,e.trigger("timerpaused.zf.".concat(a))}}o.r(e),o.d(e,{Timer:function(){return n}})},"./foundation.core":function(t){t.exports=e}},r={},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,{a:e}),e},n.d=function(t,e){for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},u={},(n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})})(u),n.d(u,{Foundation:function(){return t.Foundation},Timer:function(){return i.Timer}}),t=n("./foundation.core"),i=n("./js/foundation.util.timer.js"),t.Foundation.Timer=i.Timer,u;function n(t){var e=r[t];return void 0!==e||(e=r[t]={exports:{}},o[t](e,e.exports,n)),e.exports}var o,r,t,i,u}); 2 | //# sourceMappingURL=foundation.util.timer.min.js.map 3 | -------------------------------------------------------------------------------- /vendor/assets/scss/components/_dropdown.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group dropdown 7 | //// 8 | 9 | /// Padding for dropdown panes. 10 | /// @type List 11 | $dropdown-padding: 1rem !default; 12 | 13 | /// Background for dropdown panes. 14 | /// @type Color 15 | $dropdown-background: $body-background !default; 16 | 17 | /// Border for dropdown panes. 18 | /// @type List 19 | $dropdown-border: 1px solid $medium-gray !default; 20 | 21 | /// Font size for dropdown panes. 22 | /// @type List 23 | $dropdown-font-size: 1rem !default; 24 | 25 | /// Width for dropdown panes. 26 | /// @type Number 27 | $dropdown-width: 300px !default; 28 | 29 | /// Border radius dropdown panes. 30 | /// @type Number 31 | $dropdown-radius: $global-radius !default; 32 | 33 | /// Sizes for dropdown panes. Each size is a CSS class you can apply. 34 | /// @type Map 35 | $dropdown-sizes: ( 36 | tiny: 100px, 37 | small: 200px, 38 | large: 400px, 39 | ) !default; 40 | 41 | /// Applies styles for a basic dropdown. 42 | @mixin dropdown-container { 43 | position: absolute; 44 | z-index: 10; 45 | 46 | display: none; 47 | 48 | width: $dropdown-width; 49 | padding: $dropdown-padding; 50 | 51 | visibility: hidden; 52 | border: $dropdown-border; 53 | border-radius: $dropdown-radius; 54 | background-color: $dropdown-background; 55 | 56 | font-size: $dropdown-font-size; 57 | 58 | 59 | // Allow an intermittent state to do positioning before making visible. 60 | &.is-opening { 61 | display: block; 62 | } 63 | 64 | &.is-open { 65 | display: block; 66 | visibility: visible; 67 | } 68 | } 69 | 70 | @mixin foundation-dropdown { 71 | .dropdown-pane { 72 | @include dropdown-container; 73 | } 74 | 75 | @each $name, $size in $dropdown-sizes { 76 | .dropdown-pane { 77 | &.#{$name} { 78 | width: $size; 79 | } 80 | } 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /vendor/assets/scss/motion-ui/util/_unit.scss: -------------------------------------------------------------------------------- 1 | @use "sass:math"; 2 | 3 | /// Removes the unit (e.g. px, em, rem) from a value, returning the number only. 4 | /// @param {Number} $num - Number to strip unit from. 5 | /// @return {Number} The same number, sans unit. 6 | /// @access private 7 | 8 | /// Divide the given `$divident` by the given `$divisor`. 9 | /// 10 | /// @param {Number} $divident - The divident. 11 | /// @param {Number} $divisor - The divisor. 12 | /// @param {Number} $precision - The precision decimals for the division. 13 | /// 14 | /// @return {Number} The product of the division. 15 | @function divide($dividend, $divisor, $precision: 12) { 16 | $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1); 17 | $dividend: math.abs($dividend); 18 | $divisor: math.abs($divisor); 19 | @if $dividend == 0 { 20 | @return 0; 21 | } 22 | @if $divisor == 0 { 23 | @error 'Cannot divide by 0'; 24 | } 25 | $remainder: $dividend; 26 | $result: 0; 27 | $factor: 10; 28 | @while ($remainder > 0 and $precision >= 0) { 29 | $quotient: 0; 30 | @while ($remainder >= $divisor) { 31 | $remainder: $remainder - $divisor; 32 | $quotient: $quotient + 1; 33 | } 34 | $result: $result * 10 + $quotient; 35 | $factor: $factor * 0.1; 36 | $remainder: $remainder * 10; 37 | $precision: $precision - 1; 38 | @if ($precision < 0 and $remainder >= $divisor * 5) { 39 | $result: $result + 1; 40 | } 41 | } 42 | $result: $result * $factor * $sign; 43 | $dividend-unit: unit($dividend); 44 | $divisor-unit: unit($divisor); 45 | $unit-map: ( 46 | 'px': 1px, 47 | 'rem': 1rem, 48 | 'em': 1em, 49 | '%': 1% 50 | ); 51 | @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) { 52 | $result: $result * map-get($unit-map, $dividend-unit); 53 | } 54 | 55 | @return $result; 56 | } 57 | 58 | @function strip-unit($num) { 59 | @return divide($num, $num * 0 + 1); 60 | } 61 | -------------------------------------------------------------------------------- /vendor/assets/scss/motion-ui/transitions/_hinge.scss: -------------------------------------------------------------------------------- 1 | /// Creates a hinge transition by rotating the element. 2 | /// @param {Keyword} $state [in] - State to transition to. 3 | /// @param {Keyword} $from [left] - Edge of the element to rotate from. Can be `top`, `right`, `bottom`, or `left`. 4 | /// @param {Keyword} $axis [edge] - Axis of the element to rotate on. Can be `edge` or `center`. 5 | /// @param {Length} $perspective [2000px] - Perceived distance between the viewer and the element. A higher number will make the rotation effect more pronounced. 6 | /// @param {Keyword} $turn-origin [null] - Side of the element to start the rotation from. Can be `from-back` or `from-front`. By default `from-back` and `from-front` for `in` and `out` states respectively. 7 | /// @param {Boolean} $fade [true] - Set to `true` to fade the element in or out simultaneously. 8 | /// @param {Duration} $duration [null] - Length (speed) of the transition. 9 | /// @param {Keyword|Function} $timing [null] - Easing of the transition. 10 | /// @param {Duration} $delay [null] - Delay in seconds or milliseconds before the transition starts. 11 | @mixin mui-hinge ( 12 | $state: in, 13 | $from: left, 14 | $axis: edge, 15 | $perspective: 2000px, 16 | $turn-origin: null, 17 | $fade: map-get($motion-ui-settings, hinge-and-fade), 18 | $duration: null, 19 | $timing: null, 20 | $delay: null 21 | ) { 22 | $turn-origin: if($turn-origin != null, $turn-origin, if($state == in, from-back, from-front)); 23 | $hinge: hinge($state, $from, $axis, $perspective, $turn-origin); 24 | 25 | @include transition-start($state) { 26 | @include transition-basics($duration, $timing, $delay); 27 | @include -mui-keyframe-get($hinge, 0); 28 | 29 | @if $fade { 30 | transition-property: transform, opacity; 31 | opacity: if($state == in, 0, 1); 32 | } @else { 33 | transition-property: transform, opacity; 34 | } 35 | } 36 | 37 | @include transition-end($state) { 38 | @include -mui-keyframe-get($hinge, 100); 39 | 40 | @if $fade { 41 | opacity: if($state == in, 1, 0); 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /vendor/assets/scss/motion-ui/util/_series.scss: -------------------------------------------------------------------------------- 1 | $-mui-queue: (); 2 | 3 | /// Creates a new animation queue. 4 | /// @param {Duration} $delay [0s] - Delay in seconds or milliseconds to place at the front of the animation queue. 5 | @mixin mui-series($delay: 0s) { 6 | $-mui-queue: () !global; 7 | 8 | @if $delay > 0 { 9 | $item: ($delay, 0s); 10 | $-mui-queue: append($-mui-queue, $item) !global; 11 | } 12 | 13 | @content; 14 | } 15 | 16 | /// Adds an animation to an animation queue. Only use this mixin inside of `mui-series()`. 17 | /// @param {Duration} $duration [1s] - Length of the animation. 18 | /// @param {Duration} $gap [0s] - Amount of time to pause before playing the animation after this one. Use a negative value to make the next effect overlap with the current one. 19 | /// @param {Arglist} $keyframes... - One or more effect functions to build the keyframe with. 20 | @mixin mui-queue( 21 | $duration: 1s, 22 | $gap: 0s, 23 | $keyframes... 24 | ) { 25 | // Build the animation 26 | $kf: -mui-process-args($keyframes...); 27 | 28 | // Calculate the delay for this animation based on how long the previous ones take 29 | $actual-delay: 0s; 30 | @each $anim in $-mui-queue { 31 | $actual-delay: $actual-delay + nth($anim, 1) + nth($anim, 2); 32 | } 33 | 34 | // Append this animation's length and gap to the end of the queue 35 | $item: ($duration, $gap); 36 | $-mui-queue: append($-mui-queue, $item) !global; 37 | 38 | // --- CSS output --- 39 | // Initial properties 40 | @include -mui-keyframe-get($kf, 0); 41 | animation-fill-mode: both; 42 | 43 | // Start the animation 44 | .#{map-get($motion-ui-settings, activate-queue-class)} & { 45 | animation-delay: $actual-delay; 46 | animation-duration: $duration; 47 | @include mui-animation($kf); 48 | } 49 | 50 | // Pause the animation. 51 | // For macOS Safari to play it correctly, `animation-play-state` 52 | // must not be `paused` before the animation start. 53 | // See https://git.io/motion-ui-97 54 | .#{map-get($motion-ui-settings, pause-queue-class)} & { 55 | animation-play-state: paused; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /vendor/assets/scss/components/_title-bar.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group title-bar 7 | //// 8 | 9 | /// Background color of a title bar. 10 | /// @type Color 11 | $titlebar-background: $black !default; 12 | 13 | /// Color of text inside a title bar. 14 | /// @type Color 15 | $titlebar-color: $white !default; 16 | 17 | /// Padding inside a title bar. 18 | /// @type Length 19 | $titlebar-padding: 0.5rem !default; 20 | 21 | /// Font weight of text inside a title bar. 22 | /// @type Weight 23 | $titlebar-text-font-weight: bold !default; 24 | 25 | /// Color of menu icons inside a title bar. 26 | /// @type Color 27 | $titlebar-icon-color: $white !default; 28 | 29 | /// Color of menu icons inside a title bar on hover. 30 | /// @type Color 31 | $titlebar-icon-color-hover: $medium-gray !default; 32 | 33 | /// Spacing between the menu icon and text inside a title bar. 34 | /// @type Length 35 | $titlebar-icon-spacing: 0.25rem !default; 36 | 37 | @mixin foundation-title-bar { 38 | .title-bar { 39 | padding: $titlebar-padding; 40 | background: $titlebar-background; 41 | color: $titlebar-color; 42 | 43 | @if $global-flexbox { 44 | display: flex; 45 | justify-content: flex-start; 46 | align-items: center; 47 | } 48 | @else { 49 | @include clearfix; 50 | } 51 | 52 | .menu-icon { 53 | margin-#{$global-left}: $titlebar-icon-spacing; 54 | margin-#{$global-right}: $titlebar-icon-spacing; 55 | } 56 | } 57 | 58 | @if $global-flexbox { 59 | .title-bar-left, 60 | .title-bar-right { 61 | flex: 1 1 0px; // sass-lint:disable-line zero-unit 62 | } 63 | 64 | .title-bar-right { 65 | text-align: right; 66 | } 67 | } 68 | @else { 69 | .title-bar-left { 70 | float: left; 71 | } 72 | 73 | .title-bar-right { 74 | float: right; 75 | text-align: right; 76 | } 77 | } 78 | 79 | .title-bar-title { 80 | display: inline-block; 81 | vertical-align: middle; 82 | font-weight: $titlebar-text-font-weight; 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /vendor/assets/scss/prototype/_prototype.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype 7 | //// 8 | 9 | // Relational Mixins 10 | @import 'relation'; 11 | 12 | // Box Mixin 13 | @import 'box'; 14 | 15 | // Rotate Mixin 16 | @import 'rotate'; 17 | 18 | // Text utilities 19 | @import 'text-utilities'; 20 | 21 | // Text transformation classes 22 | @import 'text-transformation'; 23 | 24 | // Text Decoration classes 25 | @import 'text-decoration'; 26 | 27 | // Font Styling 28 | @import 'font-styling'; 29 | 30 | // List Style type 31 | @import 'list-style-type'; 32 | 33 | // Rounded Utility 34 | @import 'rounded'; 35 | 36 | // Bordered Utility 37 | @import 'bordered'; 38 | 39 | // Shadow Utility 40 | @import 'shadow'; 41 | 42 | // Arrow Utility 43 | @import 'arrow'; 44 | 45 | // Separator Utility 46 | @import 'separator'; 47 | 48 | // Overflow helper classes 49 | @import 'overflow'; 50 | 51 | // Display classes 52 | @import 'display'; 53 | 54 | // Position Helpers 55 | @import 'position'; 56 | 57 | // Border box 58 | @import 'border-box'; 59 | 60 | // Border none Utilty 61 | @import 'border-none'; 62 | 63 | // Sizing Utilities 64 | @import 'sizing'; 65 | 66 | // Spacing Utilities 67 | @import 'spacing'; 68 | 69 | @mixin foundation-prototype-classes { 70 | @include foundation-prototype-text-utilities; 71 | @include foundation-prototype-text-transformation; 72 | @include foundation-prototype-text-decoration; 73 | @include foundation-prototype-font-styling; 74 | @include foundation-prototype-list-style-type; 75 | @include foundation-prototype-rounded; 76 | @include foundation-prototype-bordered; 77 | @include foundation-prototype-shadow; 78 | @include foundation-prototype-arrow; 79 | @include foundation-prototype-separator; 80 | @include foundation-prototype-overflow; 81 | @include foundation-prototype-display; 82 | @include foundation-prototype-position; 83 | @include foundation-prototype-border-box; 84 | @include foundation-prototype-border-none; 85 | @include foundation-prototype-sizing; 86 | @include foundation-prototype-spacing; 87 | } 88 | -------------------------------------------------------------------------------- /lib/generators/foundation/templates/foundation_and_overrides.scss: -------------------------------------------------------------------------------- 1 | @charset 'utf-8'; 2 | 3 | @import 'settings'; 4 | @import 'foundation'; 5 | 6 | // If you'd like to include motion-ui the foundation-rails gem comes prepackaged with it, uncomment the 3 @imports, if you are not using the gem you need to install the motion-ui sass package. 7 | // 8 | // @import 'motion-ui/motion-ui'; 9 | 10 | // We include everything by default. To slim your CSS, remove components you don't use. 11 | 12 | @include foundation-global-styles; 13 | @include foundation-xy-grid-classes; 14 | //@include foundation-grid; 15 | //@include foundation-flex-grid; 16 | @include foundation-flex-classes; 17 | @include foundation-typography; 18 | @include foundation-forms; 19 | @include foundation-button; 20 | @include foundation-accordion; 21 | @include foundation-accordion-menu; 22 | @include foundation-badge; 23 | @include foundation-breadcrumbs; 24 | @include foundation-button-group; 25 | @include foundation-callout; 26 | @include foundation-card; 27 | @include foundation-close-button; 28 | @include foundation-menu; 29 | @include foundation-menu-icon; 30 | @include foundation-drilldown-menu; 31 | @include foundation-dropdown; 32 | @include foundation-dropdown-menu; 33 | @include foundation-responsive-embed; 34 | @include foundation-label; 35 | @include foundation-media-object; 36 | @include foundation-off-canvas; 37 | @include foundation-orbit; 38 | @include foundation-pagination; 39 | @include foundation-progress-bar; 40 | @include foundation-slider; 41 | @include foundation-sticky; 42 | @include foundation-reveal; 43 | @include foundation-switch; 44 | @include foundation-table; 45 | @include foundation-tabs; 46 | @include foundation-thumbnail; 47 | @include foundation-title-bar; 48 | @include foundation-tooltip; 49 | @include foundation-top-bar; 50 | @include foundation-visibility-classes; 51 | @include foundation-float-classes; 52 | 53 | // If you'd like to include motion-ui the foundation-rails gem comes prepackaged with it, uncomment the 3 @imports, if you are not using the gem you need to install the motion-ui sass package. 54 | // 55 | // @include motion-ui-transitions; 56 | // @include motion-ui-animations; 57 | -------------------------------------------------------------------------------- /vendor/assets/scss/prototype/_text-utilities.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-text-utilities 7 | //// 8 | 9 | /// Responsive breakpoints for text utilities 10 | /// @type Boolean 11 | $prototype-utilities-breakpoints: $global-prototype-breakpoints !default; 12 | 13 | /// Default Value for `text-overflow` variable 14 | /// @type String 15 | $prototype-text-overflow: ellipsis !default; 16 | 17 | /// Image Replacement utility. `text-hide` 18 | @mixin text-hide { 19 | font: 0/0 a !important; 20 | color: transparent !important; 21 | text-shadow: none !important; 22 | background-color: transparent !important; 23 | border: 0 !important; 24 | } 25 | 26 | /// Truncating the text, elipsis by default. 27 | /// @param {String} $overflow [$prototype-text-overflow] Text Truncate 28 | @mixin text-truncate( 29 | $overflow: $prototype-text-overflow 30 | ) { 31 | max-width: 100% !important; 32 | overflow: hidden !important; 33 | text-overflow: $overflow; 34 | white-space: nowrap !important; 35 | } 36 | 37 | /// No wrapping of the text. `text-nowrap` 38 | @mixin text-nowrap { 39 | white-space: nowrap !important; 40 | } 41 | 42 | /// Wrapping of the text. `text-wrap` 43 | @mixin text-wrap { 44 | word-wrap: break-word !important; 45 | } 46 | 47 | @mixin foundation-prototype-text-utilities { 48 | .text-hide { 49 | @include text-hide; 50 | } 51 | 52 | .text-truncate { 53 | @include text-truncate; 54 | } 55 | 56 | .text-nowrap { 57 | @include text-nowrap; 58 | } 59 | 60 | .text-wrap { 61 | @include text-wrap; 62 | } 63 | 64 | @if ($prototype-utilities-breakpoints) { 65 | // Loop through Responsive Breakpoints 66 | @each $size in $breakpoint-classes { 67 | @include breakpoint($size) { 68 | @if $size != $-zf-zero-breakpoint { 69 | .#{$size}-text-hide { 70 | @include text-hide; 71 | } 72 | 73 | .#{$size}-text-truncate { 74 | @include text-truncate; 75 | } 76 | 77 | .#{$size}-text-nowrap { 78 | @include text-nowrap; 79 | } 80 | 81 | .#{$size}-text-wrap { 82 | @include text-wrap; 83 | } 84 | } 85 | } 86 | } 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /vendor/assets/scss/grid/_layout.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group grid 7 | //// 8 | 9 | /// Sizes child elements so that `$n` number of items appear on each row. 10 | /// 11 | /// @param {Number} $n - Number of elements to display per row. 12 | /// @param {String} $selector ['.column'] - Selector(s) to use for child elements. 13 | /// @param {Number|List} $gutter 14 | /// The gutter to apply to child elements. Accepts multiple values: 15 | /// - $grid-column-gutter will use the values in the $grid-column-gutter map, including breakpoint sizes. 16 | /// - A fixed numeric value will apply this gutter to all breakpoints. 17 | @mixin grid-layout( 18 | $n, 19 | $selector: '.column', 20 | $gutter: null 21 | ) { 22 | & > #{$selector} { 23 | float: $global-left; 24 | width: percentage(divide(1, $n)); 25 | 26 | // If a $gutter value is passed 27 | @if($gutter) { 28 | // Gutters 29 | @if type-of($gutter) == 'map' { 30 | @each $breakpoint, $value in $gutter { 31 | $padding: rem-calc($value) * 0.5; 32 | 33 | @include breakpoint($breakpoint) { 34 | padding-right: $padding; 35 | padding-left: $padding; 36 | } 37 | } 38 | } 39 | @else if type-of($gutter) == 'number' and strip-unit($gutter) > 0 { 40 | $padding: rem-calc($gutter) * 0.5; 41 | padding-right: $padding; 42 | padding-left: $padding; 43 | } 44 | } 45 | 46 | &:nth-of-type(1n) { 47 | clear: none; 48 | } 49 | 50 | &:nth-of-type(#{$n}n+1) { 51 | clear: both; 52 | } 53 | 54 | &:last-child { 55 | float: $global-left; 56 | } 57 | } 58 | } 59 | 60 | /// Adds extra CSS to block grid children so the last items in the row center automatically. Apply this to the columns, not the row. 61 | /// 62 | /// @param {Number} $n - Number of items that appear in each row. 63 | @mixin grid-layout-center-last($n) { 64 | @for $i from 1 to $n { 65 | @if $i == 1 { 66 | &:nth-child(#{$n}n+1):last-child { 67 | margin-left: (100 - divide(100, $n) * $i) * 0.5 * 1%; 68 | } 69 | } 70 | @else { 71 | &:nth-child(#{$n}n+1):nth-last-child(#{$i}) { 72 | margin-left: (100 - divide(100, $n) * $i) * 0.5 * 1%; 73 | } 74 | } 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /vendor/assets/scss/xy-grid/_collapse.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group xy-grid 7 | //// 8 | 9 | /// Collapses the grid a cells within it. 10 | /// 11 | /// @param {String} $selector [.cell] - The child element to remove the gutter from. 12 | /// @param {Keyword} $gutter-type [margin] - The type of gutter to remove. 13 | /// @param {List} $gutter-position [right left] - The positions to remove gutters from. Accepts `top`, `bottom`, `left`, `right` in any combination. 14 | /// @param {Keyword} $min-breakpoint [$-zf-zero-breakpoint] - Minimum breakpoint in `$breakpoint-classes` for which to collapse the gutter. 15 | @mixin xy-grid-collapse( 16 | $selector: '.cell', 17 | $gutter-type: margin, 18 | $gutter-position: right left, 19 | $min-breakpoint: $-zf-zero-breakpoint 20 | ) { 21 | // First, lets negate any margins on the top level 22 | @if ($gutter-type == 'margin') { 23 | 24 | @include breakpoint($min-breakpoint) { 25 | @each $value in $gutter-position { 26 | margin-#{$value}: 0; 27 | } 28 | 29 | > #{$selector} { 30 | @each $value in $gutter-position { 31 | margin-#{$value}: 0; 32 | } 33 | } 34 | } 35 | 36 | $excluded-bps: -zf-breakpoints-less-than($min-breakpoint); 37 | 38 | // Output new widths to not include gutters 39 | @each $bp in $breakpoint-classes { 40 | @if(sl-contain($excluded-bps, $bp)) { 41 | @include breakpoint($min-breakpoint) { 42 | @for $i from 1 through $grid-columns { 43 | // Sizing (percentage) 44 | > .#{$bp}-#{$i} { 45 | @include xy-cell-size($i, $gutter-type: none); 46 | } 47 | } 48 | } 49 | } @else { 50 | @include breakpoint($bp) { 51 | @for $i from 1 through $grid-columns { 52 | // Sizing (percentage) 53 | > .#{$bp}-#{$i} { 54 | @include xy-cell-size($i, $gutter-type: none); 55 | } 56 | } 57 | } 58 | } 59 | } 60 | } 61 | @else { 62 | 63 | @include breakpoint($min-breakpoint) { 64 | @each $value in $gutter-position { 65 | margin-#{$value}: 0; 66 | } 67 | 68 | > #{$selector} { 69 | @each $value in $gutter-position { 70 | padding-#{$value}: 0; 71 | } 72 | } 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /vendor/assets/scss/forms/_progress.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group progress-bar 7 | //// 8 | 9 | /// Height of a progress bar. 10 | /// @type Number 11 | $progress-height: 1rem !default; 12 | 13 | /// Background color of a progress bar. 14 | /// @type Color 15 | $progress-background: $medium-gray !default; 16 | 17 | /// Bottom margin of a progress bar. 18 | /// @type Number 19 | $progress-margin-bottom: $global-margin !default; 20 | 21 | /// Default color of a progress bar's meter. 22 | /// @type Color 23 | $progress-meter-background: $primary-color !default; 24 | 25 | /// Default radius of a progress bar. 26 | /// @type Number 27 | $progress-radius: $global-radius !default; 28 | 29 | @mixin foundation-progress-element { 30 | progress { 31 | display: block; 32 | width: 100%; 33 | height: $progress-height; 34 | margin-bottom: $progress-margin-bottom; 35 | 36 | appearance: none; 37 | 38 | @if has-value($progress-radius) { 39 | border-radius: $progress-radius; 40 | } 41 | 42 | // For Firefox 43 | border: 0; 44 | background: $progress-background; 45 | 46 | &::-webkit-progress-bar { 47 | background: $progress-background; 48 | 49 | @if has-value($progress-radius) { 50 | border-radius: $progress-radius; 51 | } 52 | } 53 | 54 | &::-webkit-progress-value { 55 | background: $progress-meter-background; 56 | 57 | @if has-value($progress-radius) { 58 | border-radius: $progress-radius; 59 | } 60 | } 61 | 62 | &::-moz-progress-bar { 63 | background: $progress-meter-background; 64 | 65 | @if has-value($progress-radius) { 66 | border-radius: $progress-radius; 67 | } 68 | } 69 | 70 | @each $name, $color in $foundation-palette { 71 | &.#{"" + $name} { 72 | // Internet Explorer sets the fill with color 73 | color: $color; 74 | 75 | &::-webkit-progress-value { 76 | background: $color; 77 | } 78 | 79 | &::-moz-progress-bar { 80 | background: $color; 81 | } 82 | } 83 | } 84 | 85 | // For IE and Edge 86 | &::-ms-fill { // sass-lint:disable-line no-vendor-prefixes 87 | @if has-value($progress-radius) { 88 | border-radius: $progress-radius; 89 | } 90 | 91 | border: 0; 92 | } 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /vendor/assets/scss/forms/_select.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group forms 7 | //// 8 | 9 | /// Background color for select menus. 10 | /// @type Color 11 | $select-background: $white !default; 12 | 13 | /// Color of the dropdown triangle inside select menus. Set to `transparent` to remove it entirely. 14 | /// @type Color 15 | $select-triangle-color: $dark-gray !default; 16 | 17 | /// Default radius for select menus. 18 | /// @type Color 19 | $select-radius: $global-radius !default; 20 | 21 | @mixin form-select { 22 | $height: ($input-font-size * unitless-calc($input-line-height)) + (get-side($input-padding, 'top') + get-side($input-padding, 'bottom')) - rem-calc(1); 23 | 24 | height: $height; 25 | margin: 0 0 $form-spacing; 26 | padding: $input-padding; 27 | 28 | appearance: none; 29 | border: $input-border; 30 | border-radius: $select-radius; 31 | background-color: $select-background; 32 | 33 | font-family: $input-font-family; 34 | font-size: $input-font-size; 35 | font-weight: $input-font-weight; 36 | line-height: $input-line-height; 37 | color: $input-color; 38 | 39 | @if has-value($input-transition) { 40 | transition: $input-transition; 41 | } 42 | 43 | @if $select-triangle-color != transparent { 44 | background-origin: content-box; 45 | background-position: $global-right (-$form-spacing) center; 46 | background-repeat: no-repeat; 47 | background-size: 9px 6px; 48 | 49 | padding-#{$global-right}: ($form-spacing * 1.5); 50 | 51 | @include background-triangle($select-triangle-color); 52 | } 53 | 54 | // Focus state 55 | &:focus { 56 | outline: none; 57 | border: $input-border-focus; 58 | background-color: $input-background-focus; 59 | box-shadow: $input-shadow-focus; 60 | 61 | @if has-value($input-transition) { 62 | transition: $input-transition; 63 | } 64 | } 65 | 66 | // Disabled state 67 | &:disabled { 68 | background-color: $input-background-disabled; 69 | cursor: $input-cursor-disabled; 70 | } 71 | 72 | // Hide the dropdown arrow shown in newer IE versions 73 | &::-ms-expand { 74 | display: none; 75 | } 76 | 77 | &[multiple] { 78 | height: auto; 79 | background-image: none; 80 | } 81 | &:not([multiple]) { 82 | padding-top: 0; 83 | padding-bottom: 0; 84 | } 85 | } 86 | 87 | @mixin foundation-form-select { 88 | select { 89 | @include form-select; 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /vendor/assets/scss/motion-ui/_settings.scss: -------------------------------------------------------------------------------- 1 | /// Format for CSS classes created with Motion UI. 2 | /// @type Map 3 | /// @prop {Boolean} append [true] - Defines if selectors are chained to the selector (`.class.enter`), or appended as a new class (`.class-enter`). 4 | /// @prop {String} prefix ['mui-'] - Prefix to add before the state of a class. Enter an empty string to use no prefix. 5 | /// @prop {String} prefix ['-active'] - Suffix to add to the active state class. 6 | $motion-ui-classes: ( 7 | chain: true, 8 | prefix: 'mui-', 9 | active: '-active', 10 | ) !default; 11 | 12 | /// State names to reference when writing motion classes. To use multiple class names for one state, enter a list of strings instead of one string. 13 | /// @type Map 14 | $motion-ui-states: ( 15 | in: 'enter', 16 | out: 'leave', 17 | ) !default; 18 | 19 | /// Default speed that transitions and animations play at, along with values for modifier classes to change the speed. 20 | /// @type Map 21 | $motion-ui-speeds: ( 22 | default: 500ms, 23 | slow: 750ms, 24 | fast: 250ms, 25 | ) !default; 26 | 27 | /// Default delay to add before motion, along with values for modifier classes to change the delay. 28 | /// @type Map 29 | $motion-ui-delays: ( 30 | default: 0, 31 | short: 300ms, 32 | long: 700ms, 33 | ) !default; 34 | 35 | /// Default easing for transitions and animations, along with values for modifier classes to change the easing. 36 | /// @type Map 37 | $motion-ui-easings: ( 38 | default: linear, 39 | linear: linear, 40 | ease: ease, 41 | ease-in: ease-in, 42 | ease-out: ease-out, 43 | ease-in-out: ease-in-out, 44 | bounce-in: cubic-bezier(0.485, 0.155, 0.24, 1.245), 45 | bounce-out: cubic-bezier(0.485, 0.155, 0.515, 0.845), 46 | bounce-in-out: cubic-bezier(0.76, -0.245, 0.24, 1.245), 47 | ) !default; 48 | 49 | /// Miscellaneous settings related to Motion UI. 50 | /// @type Map 51 | /// @prop {Boolean} slide-and-fade [false] - Defines if slide motions should also fade in/out. 52 | /// @prop {Boolean} slide-and-fade [true] - Defines if hinge motions should also fade in/out. 53 | /// @prop {Boolean} slide-and-fade [true] - Defines if scale motions should also fade in/out. 54 | /// @prop {Boolean} slide-and-fade [true] - Defines if spin motions should also fade in/out. 55 | $motion-ui-settings: ( 56 | slide-and-fade: false, 57 | hinge-and-fade: true, 58 | scale-and-fade: true, 59 | spin-and-fade: true, 60 | pause-queue-class: 'is-paused', 61 | activate-queue-class: 'is-animating', 62 | ) !default; 63 | -------------------------------------------------------------------------------- /vendor/assets/js/plugins/foundation.util.nest.min.js: -------------------------------------------------------------------------------- 1 | ((e,n)=>{"object"==typeof exports&&"object"==typeof module?module.exports=n(require("./foundation.core"),require("jquery")):"function"==typeof define&&define.amd?define(["./foundation.core","jquery"],n):"object"==typeof exports?exports.__FOUNDATION_EXTERNAL__=n(require("./foundation.core"),require("jquery")):(e.__FOUNDATION_EXTERNAL__=e.__FOUNDATION_EXTERNAL__||{},e.__FOUNDATION_EXTERNAL__["foundation.util.nest"]=n(e.__FOUNDATION_EXTERNAL__["foundation.core"],e.jQuery))})(self,function(n,t){return r={"./js/foundation.util.nest.js":function(e,n,t){t.r(n),t.d(n,{Nest:function(){return o}});var n=t("jquery"),c=t.n(n),o={Feather:function(e){var o=1li, > li > ul, .menu, .menu > li, [data-submenu] > li").removeClass("".concat(t," ").concat(o," ").concat(n," is-submenu-item submenu is-active")).removeAttr("data-submenu").css("display","")}}},"./foundation.core":function(e){e.exports=n},jquery:function(e){e.exports=t}},u={},o.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(n,{a:n}),n},o.d=function(e,n){for(var t in n)o.o(n,t)&&!o.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},o.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},i={},(o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})})(i),o.d(i,{Foundation:function(){return e.Foundation},Nest:function(){return a.Nest}}),e=o("./foundation.core"),a=o("./js/foundation.util.nest.js"),e.Foundation.Nest=a.Nest,i;function o(e){var n=u[e];return void 0!==n||(n=u[e]={exports:{}},r[e](n,n.exports,o)),n.exports}var r,u,e,a,i}); 2 | //# sourceMappingURL=foundation.util.nest.min.js.map 3 | -------------------------------------------------------------------------------- /vendor/assets/scss/forms/_error.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group abide 7 | //// 8 | 9 | /// Sets if error styles should be added to inputs. 10 | /// @type Boolean 11 | $abide-inputs: true !default; 12 | 13 | /// Sets if error styles should be added to labels. 14 | /// @type Boolean 15 | $abide-labels: true !default; 16 | 17 | /// Background color to use for invalid text inputs. 18 | /// @type Color 19 | $input-background-invalid: get-color(alert) !default; 20 | 21 | /// Color to use for labels of invalid inputs. 22 | /// @type Color 23 | $form-label-color-invalid: get-color(alert) !default; 24 | 25 | /// Default font color for form error text. 26 | /// @type Color 27 | $input-error-color: get-color(alert) !default; 28 | 29 | /// Default font size for form error text. 30 | /// @type Number 31 | $input-error-font-size: rem-calc(12) !default; 32 | 33 | /// Default font weight for form error text. 34 | /// @type Keyword 35 | $input-error-font-weight: $global-weight-bold !default; 36 | 37 | /// Styles the background and border of an input field to have an error state. 38 | /// 39 | /// @param {Color} $background [$alert-color] - Color to use for the background and border. 40 | /// @param {Number} $background-lighten [10%] - Lightness level of the background color. 41 | @mixin form-input-error( 42 | $background: $input-background-invalid, 43 | $background-lighten: 10% 44 | ) { 45 | &:not(:focus) { 46 | border-color: $background; 47 | background-color: mix($background, $white, $background-lighten); 48 | 49 | &::placeholder { 50 | color: $background; 51 | } 52 | } 53 | } 54 | 55 | /// Adds error styles to a form element, using the values in the settings file. 56 | @mixin form-error { 57 | display: none; 58 | margin-top: $form-spacing * -0.5; 59 | margin-bottom: $form-spacing; 60 | 61 | font-size: $input-error-font-size; 62 | font-weight: $input-error-font-weight; 63 | color: $input-error-color; 64 | } 65 | 66 | @mixin foundation-form-error { 67 | @if $abide-inputs { 68 | // Error class for invalid inputs 69 | .is-invalid-input { 70 | @include form-input-error; 71 | } 72 | } 73 | 74 | @if $abide-labels { 75 | // Error class for labels of invalid outputs 76 | .is-invalid-label { 77 | color: $form-label-color-invalid; 78 | } 79 | } 80 | 81 | // Form error element 82 | .form-error { 83 | @include form-error; 84 | 85 | &.is-visible { 86 | display: block; 87 | } 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /vendor/assets/scss/motion-ui/effects/_hinge.scss: -------------------------------------------------------------------------------- 1 | /// Creates a hinge effect by rotating the element. 2 | /// @param {Keyword} $state [in] - State to transition to. 3 | /// @param {Keyword} $from [left] - Edge of the element to rotate from. Can be `top`, `right`, `bottom`, or `left`. 4 | /// @param {Keyword} $axis [edge] - Axis of the element to rotate on. Can be `edge` or `center`. 5 | /// @param {Number} $perspective [2000px] - Perceived distance between the viewer and the element. A higher number will make the rotation effect more pronounced. 6 | /// @param {Keyword} $turn-origin [null] - Side of the element to start the rotation from. Can be `from-back` or `from-front`. By default `from-back` and `from-front` for `in` and `out` states respectively. 7 | @function hinge ( 8 | $state: in, 9 | $from: left, 10 | $axis: edge, 11 | $perspective: 2000px, 12 | $turn-origin: null 13 | ) { 14 | // Rotation directions when hinging from back vs. front 15 | $rotation-amount: 90deg; 16 | $rotations-back: ( 17 | top: rotateX($rotation-amount * -1), 18 | right: rotateY($rotation-amount * -1), 19 | bottom: rotateX($rotation-amount), 20 | left: rotateY($rotation-amount), 21 | ); 22 | $rotations-from: ( 23 | top: rotateX($rotation-amount), 24 | right: rotateY($rotation-amount), 25 | bottom: rotateX($rotation-amount * -1), 26 | left: rotateY($rotation-amount * -1), 27 | ); 28 | 29 | // Rotation origin 30 | $turn-origin: if($turn-origin != null, $turn-origin, if($state == in, from-back, from-front)); 31 | $rotation: ''; 32 | @if $turn-origin == from-front { 33 | $rotation: map-get($rotations-from, $from); 34 | } @else if $turn-origin == from-back { 35 | $rotation: map-get($rotations-back, $from); 36 | } @else { 37 | @warn '$turn-origin must be either "from-back" or "from-front"'; 38 | } 39 | 40 | // Start and end state 41 | $start: ''; 42 | $end: ''; 43 | @if $state == in { 44 | $start: perspective($perspective) $rotation; 45 | $end: perspective($perspective) rotate(0deg); 46 | } @else { 47 | $start: perspective($perspective) rotate(0deg); 48 | $end: perspective($perspective) $rotation; 49 | } 50 | 51 | // Turn axis 52 | $origin: ''; 53 | @if $axis == edge { 54 | $origin: $from; 55 | } @else { 56 | $origin: center; 57 | } 58 | 59 | $keyframes: ( 60 | name: -mui-string-safe('hinge-#{$state}-#{$from}-#{$axis}-#{$turn-origin}'), 61 | 0: (transform: $start, transform-origin: $origin), 62 | 100: (transform: $end), 63 | ); 64 | 65 | @return $keyframes; 66 | } 67 | -------------------------------------------------------------------------------- /vendor/assets/scss/prototype/_overflow.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-overflow 7 | //// 8 | 9 | /// Responsive breakpoints for overflow helper classes 10 | /// @type Boolean 11 | $prototype-overflow-breakpoints: $global-prototype-breakpoints !default; 12 | 13 | /// Map containing all the `overflow` classes 14 | /// @type Map 15 | $prototype-overflow: ( 16 | visible, 17 | hidden, 18 | scroll 19 | ) !default; 20 | 21 | /// Overflow classes, by default coming through a map `$prototype-overflow` 22 | /// @param {String} $overflow [] Overflow classes 23 | @mixin overflow($overflow) { 24 | overflow: $overflow !important; 25 | @if $overflow == 'scroll' { 26 | -webkit-overflow-scrolling: touch; 27 | } 28 | } 29 | 30 | /// Overflow classes on horizontal axis, by default coming through a map `$prototype-overflow` 31 | /// @param {String} $overflow [] Overflow classes (horizontal axis) 32 | @mixin overflow-x($overflow) { 33 | overflow-x: $overflow !important; 34 | @if $overflow == 'scroll' { 35 | -webkit-overflow-scrolling: touch; 36 | } 37 | } 38 | 39 | /// Overflow classes on vertical axis, by default coming through a map `$prototype-overflow` 40 | /// @param {String} $overflow [] Overflow classes (vertical axis) 41 | @mixin overflow-y($overflow) { 42 | overflow-y: $overflow !important; 43 | @if $overflow == 'scroll' { 44 | -webkit-overflow-scrolling: touch; 45 | } 46 | } 47 | 48 | @mixin foundation-prototype-overflow { 49 | @each $overflow in $prototype-overflow { 50 | .overflow-#{$overflow} { 51 | @include overflow($overflow); 52 | } 53 | .overflow-x-#{$overflow} { 54 | @include overflow-x($overflow); 55 | } 56 | .overflow-y-#{$overflow} { 57 | @include overflow-y($overflow); 58 | } 59 | } 60 | 61 | @if ($prototype-overflow-breakpoints) { 62 | // Loop through Responsive Breakpoints 63 | @each $size in $breakpoint-classes { 64 | @include breakpoint($size) { 65 | @each $overflow in $prototype-overflow { 66 | @if $size != $-zf-zero-breakpoint { 67 | .#{$size}-overflow-#{$overflow} { 68 | @include overflow($overflow); 69 | } 70 | .#{$size}-overflow-x-#{$overflow} { 71 | @include overflow-x($overflow); 72 | } 73 | .#{$size}-overflow-y-#{$overflow} { 74 | @include overflow-y($overflow); 75 | } 76 | } 77 | } 78 | } 79 | } 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /vendor/assets/scss/grid/_gutter.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group grid 7 | //// 8 | 9 | /// Set the gutters on a column 10 | /// @param {Number|Keyword} $gutter [auto] 11 | /// Spacing between columns, accepts multiple values: 12 | /// - A single value will make the gutter that exact size. 13 | /// - A breakpoint name will make the gutter the corresponding size in the $gutters map. 14 | /// - "auto" will make the gutter responsive, using the $gutters map values. 15 | /// @param {Number|Map} $gutters [$grid-column-gutter] - Gutter map or single value to use. Responsive gutter settings by default. 16 | @mixin grid-column-gutter( 17 | $gutter: auto, 18 | $gutters: $grid-column-gutter 19 | ) { 20 | @include -zf-breakpoint-value($gutter, $gutters) { 21 | $padding: rem-calc($-zf-bp-value) * 0.5; 22 | 23 | padding-right: $padding; 24 | padding-left: $padding; 25 | } 26 | } 27 | 28 | /// Collapse the gutters on a column by removing the padding. **Note:** only use this mixin within a breakpoint. To collapse a column's gutters on all screen sizes, use the `$gutter` parameter of the `grid-column()` mixin instead. 29 | @mixin grid-column-collapse { 30 | @include grid-column-gutter(0); 31 | } 32 | 33 | /// Shorthand for `grid-column-gutter()`. 34 | /// @alias grid-column-gutter 35 | @mixin grid-col-gutter( 36 | $gutter: auto, 37 | $gutters: $grid-column-gutter 38 | ) { 39 | @include grid-column-gutter($gutter, $gutters); 40 | } 41 | 42 | /// Shorthand for `grid-column-collapse()`. 43 | /// @alias grid-column-collapse 44 | @mixin grid-col-collapse { 45 | @include grid-column-collapse; 46 | } 47 | 48 | /// Sets bottom margin on grid columns to match gutters 49 | /// @param {Number|Keyword} $margin [auto] 50 | /// The bottom margin on grid columns, accepts multiple values: 51 | /// - A single value will make the margin that exact size. 52 | /// - A breakpoint name will make the margin the corresponding size in the $margins map. 53 | /// - "auto" will make the margin responsive, using the $margins map values. 54 | /// @param {Number|Map} $margins [$grid-column-gutter] - Map or single value to use. Responsive gutter settings by default. 55 | @mixin grid-column-margin ( 56 | $margin: auto, 57 | $margins: $grid-column-gutter 58 | ) { 59 | @include -zf-breakpoint-value($margin, $margins) { 60 | $margin-bottom: rem-calc($-zf-bp-value); 61 | margin-bottom: $margin-bottom; 62 | 63 | > :last-child { 64 | margin-bottom: 0; 65 | } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /vendor/assets/js/plugins/foundation.util.motion.min.js: -------------------------------------------------------------------------------- 1 | ((n,e)=>{"object"==typeof exports&&"object"==typeof module?module.exports=e(require("./foundation.core"),require("jquery")):"function"==typeof define&&define.amd?define(["./foundation.core","jquery"],e):"object"==typeof exports?exports.__FOUNDATION_EXTERNAL__=e(require("./foundation.core"),require("jquery")):(n.__FOUNDATION_EXTERNAL__=n.__FOUNDATION_EXTERNAL__||{},n.__FOUNDATION_EXTERNAL__["foundation.util.motion"]=e(n.__FOUNDATION_EXTERNAL__["foundation.core"],n.jQuery))})(self,function(e,o){return i={"./js/foundation.util.motion.js":function(n,e,o){o.r(e),o.d(e,{Motion:function(){return t},Move:function(){return i}});var e=o("jquery"),a=o.n(e),f=o("./foundation.core"),c=["mui-enter","mui-leave"],d=["mui-enter-active","mui-leave-active"],t={animateIn:function(n,e,o){r(!0,n,e,o)},animateOut:function(n,e,o){r(!1,n,e,o)}};function i(o,t,i){var r,u,a=null;0===o?(i.apply(t),t.trigger("finished.zf.animate",[t]).triggerHandler("finished.zf.animate",[t])):r=window.requestAnimationFrame(function n(e){u=e-(a=a||e),i.apply(t),u :last-child { 63 | margin-bottom: 0; 64 | } 65 | 66 | .stack-for-#{$-zf-zero-breakpoint} & { 67 | @include breakpoint($-zf-zero-breakpoint only) { 68 | @include media-object-stack; 69 | } 70 | } 71 | 72 | @if $global-flexbox { 73 | &.main-section { 74 | flex: 1 1 0px; // sass-lint:disable-line zero-unit 75 | } 76 | } 77 | @else { 78 | &.middle { 79 | vertical-align: middle; 80 | } 81 | 82 | &.bottom { 83 | vertical-align: bottom; 84 | } 85 | } 86 | } 87 | 88 | /// Adds styles to stack sections of a media object. Apply this to the section elements, not the container. 89 | @mixin media-object-stack { 90 | padding: 0; 91 | padding-bottom: $mediaobject-section-padding; 92 | 93 | @if $global-flexbox { 94 | flex-basis: 100%; 95 | max-width: 100%; 96 | } 97 | @else { 98 | display: block; 99 | } 100 | 101 | img { 102 | width: $mediaobject-image-width-stacked; 103 | } 104 | } 105 | 106 | @mixin foundation-media-object { 107 | .media-object { 108 | @include media-object-container; 109 | } 110 | 111 | .media-object-section { 112 | @include media-object-section; 113 | } 114 | } 115 | -------------------------------------------------------------------------------- /vendor/assets/scss/typography/_print.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | /// If `true`, all elements will have transparent backgrounds when printed, to save on ink. 6 | /// @type Boolean 7 | /// @group global 8 | $print-transparent-backgrounds: true !default; 9 | 10 | /// If `true`, displays next to all links their "href" when printed. 11 | /// @type Boolean 12 | /// @group global 13 | $print-hrefs: true !default; 14 | 15 | // sass-lint:disable-all 16 | 17 | @mixin foundation-print-styles { 18 | .show-for-print { display: none !important; } 19 | 20 | @media print { 21 | * { 22 | // Ensure a "black-on-white" print by removing backgrounds, 23 | // using black text everywhere and forcing the browser to economize ink. 24 | @if $print-transparent-backgrounds { 25 | background: transparent !important; 26 | color: black !important; // Black prints faster: h5bp.com/s 27 | print-color-adjust: economy; 28 | } 29 | // Otherwise, prevent any economy by the browser. 30 | @else { 31 | print-color-adjust: exact; 32 | } 33 | 34 | box-shadow: none !important; 35 | text-shadow: none !important; 36 | } 37 | 38 | .show-for-print { display: block !important; } 39 | .hide-for-print { display: none !important; } 40 | 41 | table.show-for-print { display: table !important; } 42 | thead.show-for-print { display: table-header-group !important; } 43 | tbody.show-for-print { display: table-row-group !important; } 44 | tr.show-for-print { display: table-row !important; } 45 | td.show-for-print { display: table-cell !important; } 46 | th.show-for-print { display: table-cell !important; } 47 | 48 | // Display the URL of a link after the text 49 | a, 50 | a:visited { text-decoration: underline;} 51 | @if $print-hrefs { 52 | a[href]:after { content: ' (' attr(href) ')'; } 53 | } 54 | 55 | // Don't display the URL for images or JavaScript/internal links 56 | .ir a:after, 57 | a[href^='javascript:']:after, 58 | a[href^='#']:after { content: ''; } 59 | 60 | // Display what an abbreviation stands for after the text 61 | abbr[title]:after { content: ' (' attr(title) ')'; } 62 | 63 | // Prevent page breaks in the middle of a blockquote or preformatted text block 64 | pre, 65 | blockquote { 66 | border: 1px solid $dark-gray; 67 | page-break-inside: avoid; 68 | } 69 | 70 | // h5bp.com/t 71 | thead { display: table-header-group; } 72 | 73 | tr, 74 | img { page-break-inside: avoid; } 75 | 76 | img { max-width: 100% !important; } 77 | 78 | @page { margin: 0.5cm; } 79 | 80 | p, 81 | h2, 82 | h3 { 83 | orphans: 3; 84 | widows: 3; 85 | } 86 | 87 | // Avoid page breaks after a heading 88 | h2, 89 | h3 { page-break-after: avoid; } 90 | 91 | // Helper to re-allow page breaks in the middle of certain elements (e.g. pre, blockquote, tr) 92 | .print-break-inside { 93 | page-break-inside: auto; 94 | } 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /vendor/assets/js/plugins/foundation.util.box.min.js: -------------------------------------------------------------------------------- 1 | ((t,e)=>{"object"==typeof exports&&"object"==typeof module?module.exports=e(require("./foundation.core")):"function"==typeof define&&define.amd?define(["./foundation.core"],e):"object"==typeof exports?exports.__FOUNDATION_EXTERNAL__=e(require("./foundation.core")):(t.__FOUNDATION_EXTERNAL__=t.__FOUNDATION_EXTERNAL__||{},t.__FOUNDATION_EXTERNAL__["foundation.util.box"]=e(t.__FOUNDATION_EXTERNAL__["foundation.core"]))})(self,function(e){return o={"./js/foundation.util.box.js":function(t,e,o){o.r(e),o.d(e,{Box:function(){return f}});var f={ImNotTouchingYou:function(t,e,o,f,n){return 0===i(t,e,o,f,n)},OverlapArea:i,GetDimensions:h,GetExplicitOffsets:function(t,e,o,f,n,i,r){var s,a,u=h(t),d=e?h(e):null;if(null!==d){switch(o){case"top":s=d.offset.top-(u.height+n);break;case"bottom":s=d.offset.top+d.height+n;break;case"left":a=d.offset.left-(u.width+i);break;case"right":a=d.offset.left+d.width+i}switch(o){case"top":case"bottom":switch(f){case"left":a=d.offset.left+i;break;case"right":a=d.offset.left-u.width+d.width-i;break;case"center":a=r?i:d.offset.left+d.width/2-u.width/2+i}break;case"right":case"left":switch(f){case"bottom":s=d.offset.top-n+d.height-u.height;break;case"top":s=d.offset.top+n;break;case"center":s=d.offset.top+n+d.height/2-u.height/2}}}return{top:s,left:a}}};function i(t,e,o,f,n){var i,r,s,t=h(t);return e=e?(i=(e=h(e)).height+e.offset.top-(t.offset.top+t.height),r=t.offset.top-e.offset.top,s=t.offset.left-e.offset.left,e.width+e.offset.left-(t.offset.left+t.width)):(i=t.windowDims.height+t.windowDims.offset.top-(t.offset.top+t.height),r=t.offset.top-t.windowDims.offset.top,s=t.offset.left-t.windowDims.offset.left,t.windowDims.width-(t.offset.left+t.width)),i=n?0:Math.min(i,0),r=Math.min(r,0),s=Math.min(s,0),e=Math.min(e,0),o?s+e:f?r+i:Math.sqrt(r*r+i*i+s*s+e*e)}function h(t){if((t=t.length?t[0]:t)===window||t===document)throw new Error("I'm sorry, Dave. I'm afraid I can't do that.");var e=t.getBoundingClientRect(),t=t.parentNode.getBoundingClientRect(),o=document.body.getBoundingClientRect(),f=window.pageYOffset,n=window.pageXOffset;return{width:e.width,height:e.height,offset:{top:e.top+f,left:e.left+n},parentDims:{width:t.width,height:t.height,offset:{top:t.top+f,left:t.left+n}},windowDims:{width:o.width,height:o.height,offset:{top:f,left:n}}}}},"./foundation.core":function(t){t.exports=e}},n={},f.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return f.d(e,{a:e}),e},f.d=function(t,e){for(var o in e)f.o(e,o)&&!f.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},f.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r={},(f.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})})(r),f.d(r,{Box:function(){return i.Box},Foundation:function(){return t.Foundation}}),t=f("./foundation.core"),i=f("./js/foundation.util.box.js"),t.Foundation.Box=i.Box,r;function f(t){var e=n[t];return void 0!==e||(e=n[t]={exports:{}},o[t](e,e.exports,f)),e.exports}var o,n,t,i,r}); 2 | //# sourceMappingURL=foundation.util.box.min.js.map 3 | -------------------------------------------------------------------------------- /vendor/assets/scss/grid/_position.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group grid 7 | //// 8 | 9 | /// Reposition a column. 10 | /// 11 | /// @param {Number|Keyword} $position - It can be: 12 | /// * A number: The column will move equal to the width of the column count 13 | /// specified. A positive number will push the column to the right, while 14 | /// a negative number will pull it to the left. 15 | /// * `center`: Column will be centered 16 | /// * `auto`: Column will be pushed to the left (or to the right for the last column). 17 | @mixin grid-column-position($position) { 18 | // Auto positioning 19 | @if $position == auto { 20 | &, &:last-child:not(:first-child) { 21 | float: $global-left; 22 | clear: none; 23 | } 24 | 25 | // Last column alignment 26 | @if $grid-column-align-edge { 27 | &:last-child:not(:first-child) { 28 | float: $global-right; 29 | } 30 | } 31 | } 32 | 33 | // Push/pull 34 | @else if type-of($position) == 'number' { 35 | $offset: percentage(divide($position, $grid-column-count)); 36 | 37 | position: relative; 38 | #{$global-left}: $offset; 39 | } 40 | 41 | // Center positioning 42 | @else if $position == center { 43 | margin-left: auto; 44 | margin-right: auto; 45 | &, &:last-child:not(:first-child) { 46 | float: none; 47 | clear: both; 48 | } 49 | } 50 | 51 | @else { 52 | @warn 'Wrong syntax for grid-column-position(). Enter a positive or negative number, "center" or "auto".'; 53 | } 54 | } 55 | 56 | /// Reset a position definition. 57 | @mixin grid-column-unposition { 58 | position: static; 59 | margin-right: 0; 60 | margin-left: 0; 61 | @include grid-column-position(auto); 62 | } 63 | 64 | /// Offsets a column to the right by `$n` columns. 65 | /// @param {Number|List} $n - Width to offset by. You can pass in any value accepted by the `grid-column()` mixin, such as `6`, `50%`, or `1 of 2`. 66 | @mixin grid-column-offset($n) { 67 | margin-#{$global-left}: grid-column($n); 68 | } 69 | 70 | /// Disable the default behavior of the last column in a row aligning to the opposite edge. 71 | @mixin grid-column-end { 72 | // This extra specificity is required for the property to be applied 73 | &:last-child:last-child { 74 | float: $global-left; 75 | } 76 | } 77 | 78 | /// Shorthand for `grid-column-position()`. 79 | /// @alias grid-column-position 80 | @mixin grid-col-pos($position) { 81 | @include grid-column-position($position); 82 | } 83 | 84 | /// Shorthand for `grid-column-unposition()`. 85 | /// @alias grid-column-unposition 86 | @mixin grid-col-unpos { 87 | @include grid-column-unposition; 88 | } 89 | 90 | /// Shorthand for `grid-column-offset()`. 91 | /// @alias grid-column-offset 92 | @mixin grid-col-off($n) { 93 | @include grid-column-offset($n); 94 | } 95 | 96 | /// Shorthand for `grid-column-end()`. 97 | /// @alias grid-column-end 98 | @mixin grid-col-end { 99 | @include grid-column-end; 100 | } 101 | -------------------------------------------------------------------------------- /vendor/assets/scss/components/_callout.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group callout 7 | //// 8 | 9 | /// Default background color. 10 | /// @type Color 11 | $callout-background: $white !default; 12 | 13 | /// Default fade value for callout backgrounds. 14 | /// @type Number 15 | $callout-background-fade: 85% !default; 16 | 17 | /// Default border style for callouts. 18 | /// @type List 19 | $callout-border: 1px solid rgba($black, 0.25) !default; 20 | 21 | /// Default bottom margin for callouts. 22 | /// @type Number 23 | $callout-margin: 0 0 1rem 0 !default; 24 | 25 | /// Sizes for Callout paddings. 26 | /// @type Map 27 | $callout-sizes: ( 28 | small: 0.5rem, 29 | default: 1rem, 30 | large: 3rem, 31 | ) !default; 32 | 33 | /// Default font color for callouts. 34 | /// @type Color 35 | $callout-font-color: $body-font-color !default; 36 | 37 | /// Default font color for callouts, if the callout has a dark background. 38 | /// @type Color 39 | $callout-font-color-alt: $body-background !default; 40 | 41 | /// Default border radius for callouts. 42 | /// @type Color 43 | $callout-radius: $global-radius !default; 44 | 45 | /// Amount to tint links used within colored panels. Set to `false` to disable this feature. 46 | /// @type Number | Boolean 47 | $callout-link-tint: 30% !default; 48 | 49 | /// Adds basic styles for a callout, including padding and margin. 50 | @mixin callout-base() { 51 | position: relative; 52 | margin: $callout-margin; 53 | padding: map-get($callout-sizes, default); 54 | 55 | border: $callout-border; 56 | border-radius: $callout-radius; 57 | 58 | // Respect the padding, fool. 59 | > :first-child { 60 | margin-top: 0; 61 | } 62 | 63 | > :last-child { 64 | margin-bottom: 0; 65 | } 66 | } 67 | 68 | /// Generate quick styles for a callout using a single color as a baseline. 69 | /// @param {Color} $color [$callout-background] - Color to use. 70 | @mixin callout-style($color: $callout-background) { 71 | $background: scale-color($color, $lightness: $callout-background-fade); 72 | 73 | background-color: $background; 74 | color: color-pick-contrast($background, ($callout-font-color, $callout-font-color-alt)); 75 | } 76 | 77 | @mixin callout-size($padding) { 78 | padding-top: $padding; 79 | padding-right: $padding; 80 | padding-bottom: $padding; 81 | padding-left: $padding; 82 | } 83 | 84 | 85 | /// Adds styles for a callout. 86 | /// @param {Color} $color [$callout-background] - Color to use. 87 | @mixin callout($color: $callout-background) { 88 | @include callout-style($color); 89 | @include callout-base; 90 | } 91 | 92 | @mixin foundation-callout { 93 | .callout { 94 | @include callout; 95 | 96 | @each $name, $color in $foundation-palette { 97 | &.#{"" + $name} { 98 | @include callout-style($color); 99 | } 100 | } 101 | 102 | @each $size, $padding in map-remove($callout-sizes, default) { 103 | &.#{$size} { 104 | @include callout-size($padding); 105 | } 106 | } 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /vendor/assets/scss/components/_card.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group card 7 | //// 8 | 9 | /// Default background color. 10 | /// @type Color 11 | $card-background: $white !default; 12 | 13 | /// Default font color for cards. 14 | /// @type Color 15 | $card-font-color: $body-font-color !default; 16 | 17 | /// Default background. 18 | /// @type Color 19 | $card-divider-background: $light-gray !default; 20 | 21 | /// Default border style. 22 | /// @type List 23 | $card-border: 1px solid $light-gray !default; 24 | 25 | /// Default card shadow. 26 | /// @type List 27 | $card-shadow: none !default; 28 | 29 | /// Default border radius. 30 | /// @type List 31 | $card-border-radius: $global-radius !default; 32 | 33 | /// Default padding. 34 | /// @type Number 35 | $card-padding: $global-padding !default; 36 | 37 | /// Default bottom margin. 38 | /// @type number 39 | $card-margin-bottom: $global-margin !default; 40 | 41 | /// Adds styles for a card container. 42 | /// @param {Color} $background - Background color of the card. 43 | /// @param {Color} $color - font color of the card. 44 | /// @param {Number} $margin - Bottom margin of the card. 45 | /// @param {List} $border - Border around the card. 46 | /// @param {List} $radius - border radius of the card. 47 | /// @param {List} $shadow - box shadow of the card. 48 | @mixin card-container( 49 | $background: $card-background, 50 | $color: $card-font-color, 51 | $margin: $card-margin-bottom, 52 | $border: $card-border, 53 | $radius: $card-border-radius, 54 | $shadow: $card-shadow 55 | ) { 56 | @if $global-flexbox { 57 | display: flex; 58 | flex-direction: column; 59 | flex-grow: 1; 60 | } 61 | 62 | margin-bottom: $margin; 63 | 64 | border: $border; 65 | border-radius: $radius; 66 | 67 | background: $background; 68 | box-shadow: $shadow; 69 | 70 | overflow: hidden; 71 | color: $color; 72 | 73 | & > :last-child { 74 | margin-bottom: 0; 75 | } 76 | } 77 | 78 | /// Adds styles for a card divider. 79 | @mixin card-divider( 80 | $background: $card-divider-background, 81 | $padding: $card-padding 82 | ) { 83 | @if $global-flexbox { 84 | display: flex; 85 | flex: 0 1 auto; 86 | } 87 | 88 | padding: $padding; 89 | background: $background; 90 | 91 | & > :last-child { 92 | margin-bottom: 0; 93 | } 94 | } 95 | 96 | /// Adds styles for a card section. 97 | @mixin card-section( 98 | $padding: $card-padding 99 | ) { 100 | @if $global-flexbox { 101 | flex: 1 0 auto; 102 | } 103 | 104 | padding: $padding; 105 | 106 | & > :last-child { 107 | margin-bottom: 0; 108 | } 109 | } 110 | 111 | @mixin foundation-card { 112 | .card { 113 | @include card-container; 114 | } 115 | 116 | .card-divider { 117 | @include card-divider; 118 | } 119 | 120 | .card-section { 121 | @include card-section; 122 | } 123 | 124 | // For IE 11 - Flexbug 125 | // https://github.com/philipwalton/flexbugs/issues/75 126 | .card-image { 127 | min-height: 1px; 128 | } 129 | } 130 | -------------------------------------------------------------------------------- /vendor/assets/scss/components/_flex.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group Flexbox Utilities 7 | //// 8 | // 9 | /// Default value for the count of source ordering` 10 | /// @type Number 11 | $flex-source-ordering-count: 6 !default; 12 | 13 | /// Quickly disable/enable Responsive breakpoints for Vanilla Flex Helpers. 14 | /// @type Boolean 15 | $flexbox-responsive-breakpoints: true !default; 16 | 17 | @mixin flex-helpers { 18 | .flex-container { 19 | @include flex; 20 | } 21 | 22 | .flex-child-auto { 23 | flex: 1 1 auto; 24 | } 25 | 26 | .flex-child-grow { 27 | flex: 1 0 auto; 28 | } 29 | 30 | .flex-child-shrink { 31 | flex: 0 1 auto; 32 | } 33 | 34 | @each $dir, $prop in $-zf-flex-direction { 35 | .flex-dir-#{$dir} { 36 | @include flex-direction($prop); 37 | } 38 | } 39 | 40 | @if ($flexbox-responsive-breakpoints) { 41 | // Loop through Responsive Breakpoints 42 | @each $size in $breakpoint-classes { 43 | @include breakpoint($size) { 44 | @if $size != $-zf-zero-breakpoint { 45 | .#{$size}-flex-container { 46 | @include flex; 47 | } 48 | 49 | .#{$size}-flex-child-auto { 50 | flex: 1 1 auto; 51 | } 52 | 53 | .#{$size}-flex-child-grow { 54 | flex: 1 0 auto; 55 | } 56 | 57 | .#{$size}-flex-child-shrink { 58 | flex: 0 1 auto; 59 | } 60 | 61 | @each $dir, $prop in $-zf-flex-direction { 62 | .#{$size}-flex-dir-#{$dir} { 63 | @include flex-direction($prop); 64 | } 65 | } 66 | } 67 | } 68 | } 69 | } 70 | } 71 | 72 | @mixin foundation-flex-classes { 73 | // Horizontal alignment using justify-content 74 | @each $hdir, $prop in $-zf-flex-justify { 75 | .align-#{$hdir} { 76 | @include flex-align($x: $hdir); 77 | } 78 | } 79 | 80 | // Horizontal alignment Specifically for Vertical Menu 81 | @each $hdir, $prop in map-remove($-zf-flex-justify, 'justify', 'spaced') { 82 | .align-#{$hdir} { 83 | &.vertical { 84 | &.menu > li > a { 85 | @include flex-align($x: $hdir); 86 | } 87 | } 88 | } 89 | } 90 | 91 | // Vertical alignment using align-items and align-self 92 | @each $vdir, $prop in $-zf-flex-align { 93 | .align-#{$vdir} { 94 | @include flex-align($y: $vdir); 95 | } 96 | 97 | .align-self-#{$vdir} { 98 | @include flex-align-self($y: $vdir); 99 | } 100 | } 101 | 102 | // Central alignment of content 103 | .align-center-middle { 104 | @include flex-align($x: center, $y: middle); 105 | align-content: center; 106 | } 107 | 108 | // Source ordering 109 | @include -zf-each-breakpoint { 110 | @for $i from 1 through $flex-source-ordering-count { 111 | .#{$-zf-size}-order-#{$i} { 112 | @include flex-order($i); 113 | } 114 | } 115 | } 116 | 117 | // Vanilla Flexbox Helpers 118 | @include flex-helpers; 119 | } 120 | -------------------------------------------------------------------------------- /vendor/assets/scss/util/_flex.scss: -------------------------------------------------------------------------------- 1 | @function -zf-flex-justify($text-direction) { 2 | $-zf-flex-justify: ( 3 | 'left': if($text-direction == rtl, flex-end, flex-start), 4 | 'right': if($text-direction == rtl, flex-start, flex-end), 5 | 'center': center, 6 | 'justify': space-between, 7 | 'spaced': space-around, 8 | ); 9 | 10 | @return $-zf-flex-justify; 11 | } 12 | 13 | 14 | $-zf-flex-align: ( 15 | 'top': flex-start, 16 | 'bottom': flex-end, 17 | 'middle': center, 18 | 'stretch': stretch, 19 | ); 20 | 21 | $-zf-flex-direction: ( 22 | 'row': row, 23 | 'row-reverse': row-reverse, 24 | 'column': column, 25 | 'column-reverse': column-reverse, 26 | ); 27 | 28 | /// Enables flexbox by adding `display: flex` to the element. 29 | @mixin flex { 30 | display: flex; 31 | } 32 | 33 | /// Horizontally or vertically aligns the items within a flex container. 34 | /// 35 | /// @param {Keyword} $x [null] - Horizontal alignment to use. Can be `left`, `right`, `center`, `justify`, or `spaced`. Or, set it to `null` (the default) to not set horizontal alignment. 36 | /// @param {Keyword} $y [null] - Vertical alignment to use. Can be `top`, `bottom`, `middle`, or `stretch`. Or, set it to `null` (the default) to not set vertical alignment. 37 | @mixin flex-align($x: null, $y: null) { 38 | @if $x { 39 | @if map-has-key($-zf-flex-justify, $x) { 40 | $x: map-get($-zf-flex-justify, $x); 41 | } 42 | @else { 43 | @warn 'flex-grid-row-align(): #{$x} is not a valid value for horizontal alignment. Use left, right, center, justify, or spaced.'; 44 | } 45 | } 46 | 47 | @if $y { 48 | @if map-has-key($-zf-flex-align, $y) { 49 | $y: map-get($-zf-flex-align, $y); 50 | } 51 | @else { 52 | @warn 'flex-grid-row-align(): #{$y} is not a valid value for vertical alignment. Use top, bottom, middle, or stretch.'; 53 | } 54 | } 55 | 56 | justify-content: $x; 57 | align-items: $y; 58 | } 59 | 60 | /// Vertically align a single column within a flex row. Apply this mixin to a flex column. 61 | /// 62 | /// @param {Keyword} $y [null] - Vertical alignment to use. Can be `top`, `bottom`, `middle`, or `stretch`. Or, set it to `null` (the default) to not set vertical alignment. 63 | @mixin flex-align-self($y: null) { 64 | @if $y { 65 | @if map-has-key($-zf-flex-align, $y) { 66 | $y: map-get($-zf-flex-align, $y); 67 | } 68 | @else { 69 | @warn 'flex-grid-column-align(): #{$y} is not a valid value for alignment. Use top, bottom, middle, or stretch.'; 70 | } 71 | } 72 | 73 | align-self: $y; 74 | } 75 | 76 | /// Changes the source order of a flex child. Children with lower numbers appear first in the layout. 77 | /// @param {Number} $order [0] - Order number to apply. 78 | @mixin flex-order($order: 0) { 79 | order: $order; 80 | } 81 | 82 | /// Change flex-direction 83 | /// @param {Keyword} $direction [row] - Flex direction to use. Can be 84 | /// - row (default): same as text direction 85 | /// - row-reverse: opposite to text direction 86 | /// - column: same as row but top to bottom 87 | /// - column-reverse: same as row-reverse top to bottom 88 | @mixin flex-direction($direction: row) { 89 | flex-direction: $direction; 90 | } 91 | -------------------------------------------------------------------------------- /vendor/assets/scss/forms/_meter.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group meter 7 | //// 8 | 9 | /// Height of a `` element. 10 | /// @type Length 11 | $meter-height: 1rem !default; 12 | 13 | /// Border radius of a `` element. 14 | /// @type Length 15 | $meter-radius: $global-radius !default; 16 | 17 | /// Background color of a `` element. 18 | /// @type Color 19 | $meter-background: $medium-gray !default; 20 | 21 | /// Meter fill for an optimal value in a `` element. 22 | /// @type Color 23 | $meter-fill-good: $success-color !default; 24 | 25 | /// Meter fill for an average value in a `` element. 26 | /// @type Color 27 | $meter-fill-medium: $warning-color !default; 28 | 29 | /// Meter fill for a suboptimal value in a `` element. 30 | /// @type Color 31 | $meter-fill-bad: $alert-color !default; 32 | 33 | @mixin foundation-meter-element { 34 | meter { 35 | display: block; 36 | width: 100%; 37 | height: $meter-height; 38 | margin-bottom: 1rem; 39 | 40 | // Disable `-webkit-appearance: none` from getting prefixed, 41 | // We have disabled autoprefixer first and are just only using 42 | // `-moz-appearance: none` as a prefix and neglecting the webkit. 43 | 44 | /*! autoprefixer: off */ 45 | -moz-appearance: none; // sass-lint:disable-line no-vendor-prefixes 46 | appearance: none; 47 | 48 | @if has-value($meter-radius) { 49 | border-radius: $meter-radius; 50 | } 51 | 52 | // For Firefox 53 | border: 0; 54 | background: $meter-background; 55 | 56 | // Chrome/Safari/Edge 57 | &::-webkit-meter-bar { 58 | border: 0; 59 | @if has-value($meter-radius) { 60 | border-radius: $meter-radius; 61 | } 62 | 63 | background: $meter-background; 64 | } 65 | 66 | &::-webkit-meter-inner-element { 67 | @if has-value($meter-radius) { 68 | border-radius: $meter-radius; 69 | } 70 | } 71 | 72 | &::-webkit-meter-optimum-value { 73 | background: $meter-fill-good; 74 | 75 | @if has-value($meter-radius) { 76 | border-radius: $meter-radius; 77 | } 78 | } 79 | 80 | &::-webkit-meter-suboptimum-value { 81 | background: $meter-fill-medium; 82 | 83 | @if has-value($meter-radius) { 84 | border-radius: $meter-radius; 85 | } 86 | } 87 | 88 | &::-webkit-meter-even-less-good-value { 89 | background: $meter-fill-bad; 90 | 91 | @if has-value($meter-radius) { 92 | border-radius: $meter-radius; 93 | } 94 | } 95 | 96 | &::-moz-meter-bar { 97 | background: $primary-color; 98 | 99 | @if has-value($meter-radius) { 100 | border-radius: $meter-radius; 101 | } 102 | } 103 | 104 | &:-moz-meter-optimum::-moz-meter-bar { 105 | background: $meter-fill-good; 106 | } 107 | 108 | &:-moz-meter-sub-optimum::-moz-meter-bar { 109 | background: $meter-fill-medium; 110 | } 111 | 112 | &:-moz-meter-sub-sub-optimum::-moz-meter-bar { 113 | background: $meter-fill-bad; 114 | } 115 | } 116 | } 117 | -------------------------------------------------------------------------------- /vendor/assets/js/plugins/foundation.util.keyboard.min.js: -------------------------------------------------------------------------------- 1 | ((e,t)=>{"object"==typeof exports&&"object"==typeof module?module.exports=t(require("./foundation.core"),require("jquery")):"function"==typeof define&&define.amd?define(["./foundation.core","jquery"],t):"object"==typeof exports?exports.__FOUNDATION_EXTERNAL__=t(require("./foundation.core"),require("jquery")):(e.__FOUNDATION_EXTERNAL__=e.__FOUNDATION_EXTERNAL__||{},e.__FOUNDATION_EXTERNAL__["foundation.util.keyboard"]=t(e.__FOUNDATION_EXTERNAL__["foundation.core"],e.jQuery))})(self,function(t,n){return r={"./js/foundation.util.keyboard.js":function(e,t,n){n.r(t),n.d(t,{Keyboard:function(){return f}});var t=n("jquery"),r=n.n(t),a=n("./foundation.core"),o={9:"TAB",13:"ENTER",27:"ESCAPE",32:"SPACE",35:"END",36:"HOME",37:"ARROW_LEFT",38:"ARROW_UP",39:"ARROW_RIGHT",40:"ARROW_DOWN"},i={};function u(e){return!!e&&e.find("a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]").filter(function(){return!(!r()(this).is(":visible")||r()(this).attr("tabindex")<0)}).sort(function(e,t){var n,o;return r()(e).attr("tabindex")===r()(t).attr("tabindex")?0:(n=parseInt(r()(e).attr("tabindex"),10),o=parseInt(r()(t).attr("tabindex"),10),void 0===r()(e).attr("tabindex")&&0{var t,n={};for(t in e)e.hasOwnProperty(t)&&(n[e[t]]=e[t]);return n})(o),parseKey:d,handleKey:function(e,t,n){var t=i[t],o=this.parseKey(e);if(!t)return console.warn("Component not defined!");!0!==e.zfIsKeyHandled&&((t=n[(void 0===t.ltr?t:(0,a.rtl)()?r().extend({},t.ltr,t.rtl):r().extend({},t.rtl,t.ltr))[o]])&&"function"==typeof t?(o=t.apply(),e.zfIsKeyHandled=!0,!n.handled&&"function"!=typeof n.handled||n.handled(o)):!n.unhandled&&"function"!=typeof n.unhandled||n.unhandled())},findFocusable:u,register:function(e,t){i[e]=t},trapFocus:function(e){var t=u(e),n=t.eq(0),o=t.eq(-1);e.on("keydown.zf.trapfocus",function(e){e.target===o[0]&&"TAB"===d(e)?(e.preventDefault(),n.focus()):e.target===n[0]&&"SHIFT_TAB"===d(e)&&(e.preventDefault(),o.focus())})},releaseFocus:function(e){e.off("keydown.zf.trapfocus")}}},"./foundation.core":function(e){e.exports=t},jquery:function(e){e.exports=n}},a={},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,{a:t}),t},o.d=function(e,t){for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},u={},(o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})})(u),o.d(u,{Foundation:function(){return e.Foundation},Keyboard:function(){return i.Keyboard}}),e=o("./foundation.core"),i=o("./js/foundation.util.keyboard.js"),e.Foundation.Keyboard=i.Keyboard,u;function o(e){var t=a[e];return void 0!==t||(t=a[e]={exports:{}},r[e](t,t.exports,o)),t.exports}var r,a,e,i,u}); 2 | //# sourceMappingURL=foundation.util.keyboard.min.js.map 3 | -------------------------------------------------------------------------------- /vendor/assets/scss/grid/_row.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group grid 7 | //// 8 | 9 | /// Change the behavior of columns defined inside this mixin to use a different column count. 10 | /// @content 11 | /// 12 | /// @param {Number} $columns - Number of columns to use. 13 | /// @param {Boolean} $root [false] 14 | /// If `false`, selectors inside this mixin will nest inside the parent selector. 15 | /// If `true`, selectors will not nest. 16 | @mixin grid-context( 17 | $columns, 18 | $root: false 19 | ) { 20 | // Store the current column count so it can be re-set later 21 | $old-grid-column-count: $grid-column-count; 22 | $grid-column-count: $columns !global; 23 | 24 | @if $root { 25 | @at-root { @content; } 26 | } 27 | @else { 28 | @content; 29 | } 30 | 31 | // Restore the old column count 32 | $grid-column-count: $old-grid-column-count !global; 33 | } 34 | 35 | /// Creates a grid row. 36 | /// @content 37 | /// 38 | /// @param {Number} $columns [null] - Column count for this row. `null` will use the default column count. 39 | /// @param {Keywords} $behavior [null] 40 | /// Modifications to the default grid styles. `nest` indicates the row will be placed inside another row. `collapse` indicates that the columns inside this row will not have padding. `nest collapse` combines both behaviors. 41 | /// @param {Keyword|Number} $size [$grid-row-width] Maximum size of the row. Set to `expand` to make the row taking the full width. 42 | /// @param {Boolean} $cf [true] - Whether or not to include a clearfix. 43 | /// @param {Number|Map} $gutters [$grid-column-gutter] - Gutter map or single value to use when inverting margins. Responsive gutter settings by default. 44 | @mixin grid-row( 45 | $columns: null, 46 | $behavior: null, 47 | $size: $grid-row-width, 48 | $cf: true, 49 | $gutters: $grid-column-gutter 50 | ) { 51 | $margin: auto; 52 | 53 | @if index($behavior, nest) != null { 54 | @include grid-row-nest($gutters); 55 | 56 | @if index($behavior, collapse) != null { 57 | margin-right: 0; 58 | margin-left: 0; 59 | } 60 | } 61 | @else { 62 | @include grid-row-size($size); 63 | margin-right: auto; 64 | margin-left: auto; 65 | } 66 | 67 | @if $cf { 68 | @include clearfix; 69 | } 70 | 71 | @if $columns != null { 72 | @include grid-context($columns) { 73 | @content; 74 | } 75 | } 76 | } 77 | 78 | /// Inverts the margins of a row to nest it inside of a column. 79 | /// 80 | /// @param {Number|Map} $gutters [$grid-column-gutter] - Gutter map or single value to use when inverting margins. Responsive gutter settings by default. 81 | @mixin grid-row-nest($gutters: $grid-column-gutter) { 82 | @include -zf-each-breakpoint { 83 | $margin: rem-calc(-zf-get-bp-val($gutters, $-zf-size)) * 0.5 * -1; 84 | 85 | margin-right: $margin; 86 | margin-left: $margin; 87 | } 88 | } 89 | 90 | /// Set a grid row size 91 | /// 92 | /// @param {Keyword|Number} $size [$grid-row-width] Maximum size of the row. Set to `expand` to make the row taking the full width. 93 | @mixin grid-row-size($size: $grid-row-width) { 94 | @if $size == expand { 95 | $size: none; 96 | } 97 | 98 | max-width: $size; 99 | } 100 | -------------------------------------------------------------------------------- /vendor/assets/scss/xy-grid/_frame.scss: -------------------------------------------------------------------------------- 1 | // sass-lint:disable no-vendor-prefixes 2 | 3 | /// Modifies a grid to give it "frame" behavior (no overflow, no wrap, stretch behavior) 4 | /// 5 | /// @param {Boolean} $vertical [false] - Is grid vertical or horizontal. Should match grid. 6 | /// @param {Boolean} $nested [false] - Is grid nested or not. If nested is true this sets the frame to 100% height, otherwise will be 100vh. 7 | /// @param {Number|Map} $gutters [null] - Map or single value for gutters. 8 | /// @param {String} $breakpoint [null] - The name of the breakpoint size in your gutters map to get the size from. 9 | /// @param {Boolean} $include-base [true] - Include the base styles that don't vary per breakpoint. 10 | @mixin xy-grid-frame( 11 | $vertical: false, 12 | $nested: false, 13 | $gutters: null, 14 | $breakpoint: null, 15 | $include-base: true 16 | ) { 17 | 18 | @if $include-base { 19 | overflow: hidden; 20 | position: relative; 21 | flex-wrap: nowrap; 22 | align-items: stretch; 23 | } 24 | 25 | @if $breakpoint == null and type-of($gutters) == 'map' { 26 | @include -zf-each-breakpoint() { 27 | @include xy-grid-frame($vertical, $nested, $gutters, $-zf-size, false); 28 | } 29 | } @else { 30 | // Get our gutters if applicable 31 | $gutter: -zf-get-bp-val($gutters, $breakpoint); 32 | 33 | // If we have a gutter, add it to the width/height 34 | @if $gutter { 35 | @if $vertical == true { 36 | $unit: if($nested == true, 100%, 100vh); 37 | $gutter: rem-calc($gutter); 38 | // Make sure that 0 is translated in 0rem for calc() 39 | @if $gutter == 0 { 40 | // sass-lint:disable zero-unit 41 | $gutter: 0rem; 42 | } 43 | height: calc(#{$unit} + #{$gutter}); 44 | } @else { 45 | $unit: if($nested == true, 100%, 100vw); 46 | $gutter: rem-calc($gutter); 47 | // Make sure that 0 is translated in 0rem for calc() 48 | @if $gutter == 0 { 49 | // sass-lint:disable zero-unit 50 | $gutter: 0rem; 51 | } 52 | width: calc(#{$unit} + #{$gutter}); 53 | } 54 | } 55 | @else { 56 | @if $vertical == true { 57 | height: if($nested == true, 100%, 100vh); 58 | } @else { 59 | width: if($nested == true, 100%, 100vw); 60 | } 61 | } 62 | } 63 | } 64 | 65 | /// Modifies a cell to give it "block" behavior (overflow auto, inertial scrolling) 66 | /// 67 | /// @param {Boolean} $vertical [false] - Is grid vertical or horizontal. Should match grid. 68 | @mixin xy-cell-block( 69 | $vertical: false 70 | ) { 71 | $property: if($vertical == true, 'overflow-y', 'overflow-x'); 72 | 73 | @if $vertical == true { 74 | overflow-y: auto; 75 | max-height: 100%; 76 | min-height: 100%; 77 | } @else { 78 | overflow-x: auto; 79 | max-width: 100%; 80 | } 81 | 82 | -webkit-overflow-scrolling: touch; 83 | -ms-overflow-style: -ms-autohiding-scrollbar; 84 | } 85 | 86 | /// Container for inside a grid frame containing multiple blocks. Typically used 87 | /// as a modifier for a `.cell` to allow the cell to pass along flex sizing 88 | /// constraints / from parents to children. 89 | @mixin xy-cell-block-container() { 90 | display: flex; 91 | flex-direction: column; 92 | max-height: 100%; 93 | 94 | > .grid-x { 95 | max-height: 100%; 96 | flex-wrap: nowrap; 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /vendor/assets/scss/motion-ui/util/_function.scss: -------------------------------------------------------------------------------- 1 | //// 2 | /// In order to improve modular namespacing, LibSass 4 only accepts first-class 3 | /// functions as argument so functions are called in their own context. 4 | /// In most case, `get-function()` must only be used by the user in its own 5 | /// context. It is used in this library to keep a maximum compatibility. 6 | /// End developer must be encouraged to use first-class functions. 7 | /// 8 | /// @link http://oddbird.net/2017/03/30/safe-get 9 | /// @link http://sass.logdown.com/posts/809572-sass-35-release-candidate 10 | //// 11 | 12 | /// 13 | /// Return if a given value is a function or a function name string. 14 | /// 15 | /// @access private 16 | /// 17 | /// @param {*} $value - Value to test 18 | /// @return {Boolean} 19 | /// 20 | @function -mui-is-function($value) { 21 | @return type-of($value) == 'function' or type-of($value) == 'string'; 22 | } 23 | 24 | /// 25 | /// Return if a given value is callable. 26 | /// 27 | /// @access private 28 | /// 29 | /// @param {*} $value - Value to test 30 | /// @return {Boolean} 31 | /// 32 | @function -mui-is-callable($value) { 33 | @return type-of($value) == 'function' or (type-of($value) == 'string' and function-exists($value)); 34 | } 35 | 36 | /// 37 | /// Check if a given value is callable and throw the appropriate error otherwise 38 | /// 39 | /// @access private 40 | /// 41 | /// @param {*} $value - Value to check 42 | /// @return {Boolean} 43 | /// 44 | @function -mui-assert-function($value) { 45 | @if -mui-is-callable($value) { 46 | @return true; 47 | } @else if (type-of($value) == 'string' and function-exists('get-function') == true) { 48 | @error 'Assertion Error: function name string "#{$value}" cannot be found. You may need to use `get-function()` and first-class functions instead. See http://oddbird.net/2017/03/30/safe-get'; 49 | } @else if (type-of($value) == 'string' and function-exists('get-function') == false) { 50 | @error 'Assertion Error: function name string "#{$value}" cannot be found.'; 51 | } @else { 52 | @error 'Assertion Error: #{$value} (#{type-of($value)}) is not a function.'; 53 | } 54 | } 55 | 56 | /// 57 | /// Return a reference to the given function or function name string compatible 58 | /// with the current Sass version. 59 | /// 60 | /// * For Sass < 3.5, return the passed argument 61 | /// * For Sass >= 3.5, return a first-class function if a function name string 62 | /// was passed 63 | /// 64 | /// @access private 65 | /// 66 | /// @param {Function|String} - $func - Function or name of the function 67 | /// @return {Function|String} Function or name of the function following 68 | /// the support of first-class functions. 69 | /// 70 | @function -mui-safe-get-function($func) { 71 | @if -mui-assert-function($func) { 72 | @if function-exists('get-function') and type-of($func) == 'string' { 73 | @return get-function($func); 74 | } @else { 75 | @return $func; 76 | } 77 | } 78 | } 79 | 80 | /// 81 | /// Polyfill for the `call` function supporting both functions and strings. 82 | /// 83 | /// @access private 84 | /// 85 | /// @param {Function|String} $func - Function or name of the function to call 86 | /// @param {Arglist} $args... - Arguments to call the function with 87 | /// 88 | /// @return {*} 89 | /// 90 | @function -mui-safe-call($func, $args...) { 91 | @if -mui-assert-function($func) { 92 | @return call(-mui-safe-get-function($func), $args...); 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /vendor/assets/scss/components/_slider.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | // [TODO] Check how plugin confirms disabled or vertical status 6 | // [TODO] Check if transition: all; is necessary 7 | 8 | //// 9 | /// @group slider 10 | //// 11 | 12 | /// Default slider width of a vertical slider. (Doesn't apply to the native slider.) 13 | /// @type Number 14 | $slider-width-vertical: 0.5rem !default; 15 | 16 | /// Transition properties to apply to the slider handle and fill. (Doesn't apply to the native slider.) 17 | /// @type Transition 18 | $slider-transition: all 0.2s ease-in-out !default; 19 | 20 | /// Adds the general styles for sliders. 21 | @mixin slider-container { 22 | position: relative; 23 | height: $slider-height; 24 | margin-top: 1.25rem; 25 | margin-bottom: 2.25rem; 26 | 27 | background-color: $slider-background; 28 | cursor: pointer; 29 | user-select: none; 30 | touch-action: none; 31 | } 32 | 33 | /// Adds the general styles for active fill for sliders. 34 | @mixin slider-fill { 35 | position: absolute; 36 | top: 0; 37 | left: 0; 38 | 39 | display: inline-block; 40 | max-width: 100%; 41 | height: $slider-height; 42 | 43 | background-color: $slider-fill-background; 44 | transition: $slider-transition; 45 | 46 | &.is-dragging { 47 | transition: all 0s linear; 48 | } 49 | } 50 | 51 | /// Adds the general styles for the slider handles. 52 | @mixin slider-handle { 53 | left: 0; 54 | z-index: 1; 55 | cursor: grab; 56 | 57 | display: inline-block; 58 | width: $slider-handle-width; 59 | height: $slider-handle-height; 60 | 61 | border-radius: $slider-radius; 62 | background-color: $slider-handle-background; 63 | transition: $slider-transition; 64 | touch-action: manipulation; 65 | 66 | @include vertical-center; 67 | @include disable-mouse-outline; 68 | 69 | &:hover { 70 | background-color: scale-color($slider-handle-background, $lightness: -15%); 71 | } 72 | 73 | &.is-dragging { 74 | transition: all 0s linear; 75 | cursor: grabbing; 76 | } 77 | } 78 | 79 | @mixin slider-disabled { 80 | opacity: $slider-opacity-disabled; 81 | cursor: not-allowed; 82 | } 83 | 84 | @mixin slider-vertical { 85 | display: inline-block; 86 | width: $slider-width-vertical; 87 | height: 12.5rem; 88 | margin: 0 1.25rem; 89 | transform: scale(1, -1); 90 | 91 | .slider-fill { 92 | top: 0; 93 | width: $slider-width-vertical; 94 | max-height: 100%; 95 | } 96 | 97 | .slider-handle { 98 | position: absolute; 99 | top: 0; 100 | left: 50%; 101 | width: $slider-handle-height; 102 | height: $slider-handle-width; 103 | transform: translateX(-50%); 104 | } 105 | } 106 | 107 | @mixin foundation-slider { 108 | // Container 109 | .slider { 110 | @include slider-container; 111 | } 112 | 113 | // Fill area 114 | .slider-fill { 115 | @include slider-fill; 116 | } 117 | 118 | // Draggable handle 119 | .slider-handle { 120 | @include slider-handle; 121 | } 122 | 123 | // Disabled state 124 | .slider.disabled, 125 | .slider[disabled] { 126 | @include slider-disabled; 127 | } 128 | 129 | // Vertical slider 130 | .slider.vertical { 131 | @include slider-vertical; 132 | } 133 | 134 | // RTL support 135 | @if $global-text-direction == rtl { 136 | .slider:not(.vertical) { 137 | transform: scale(-1, 1); 138 | } 139 | } 140 | } 141 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Foundation::Rails 2 | 3 | [![Gem Version](https://badge.fury.io/rb/foundation-rails.svg)](https://badge.fury.io/rb/foundation-rails) 4 | 5 | **Foundation::Rails** is a gem that makes it super easy to use Foundation in your upcoming Rails project. 6 | 7 | ## Installation 8 | 9 | Add these lines to your application's Gemfile: 10 | 11 | ```shell 12 | gem 'foundation-rails' 13 | gem 'autoprefixer-rails' 14 | ``` 15 | 16 | And then execute: 17 | 18 | ```shell 19 | bundle 20 | ``` 21 | 22 | Or install it yourself as: 23 | 24 | ```shell 25 | gem install foundation-rails 26 | ``` 27 | 28 | ### Configuring Foundation 29 | 30 | You can run the following command to add Foundation: 31 | 32 | ```shell 33 | rails g foundation:install 34 | ``` 35 | 36 | Generating Haml or Slim versions of the markup can be done by appending the `--haml` or `--slim` option to the above command. 37 | 38 | ### Motion UI 39 | 40 | [Motion UI](https://github.com/zurb/motion-ui) is a Sass library for creating flexible UI transitions and animations, and it comes packaged with the `foundation-rails` gem. To use Motion UI, uncomment the following lines from `foundation_and_overrides.scss`: 41 | 42 | ```scss 43 | // @import 'motion-ui/motion-ui'; 44 | // @include motion-ui-transitions; 45 | // @include motion-ui-animations; 46 | ``` 47 | 48 | ## Manual Installation 49 | 50 | ### Add Foundation to your CSS 51 | 52 | Append the following line to your `app/assets/stylesheets/application.css` file: 53 | 54 | ```scss 55 | /*= require foundation 56 | ``` 57 | 58 | If you're planning on using Sass, then you'll want to rename `application.css` to `application.scss`. That file should then look like: 59 | 60 | ```scss 61 | @import "foundation_and_overrides"; 62 | /* Add imports of custom sass/scss files here */ 63 | ``` 64 | 65 | ### Add Foundation to your JS 66 | 67 | Append the following lines to your `app/assets/javascripts/application.js` file: 68 | 69 | ```js 70 | //= require foundation 71 | $(function(){ $(document).foundation(); }); 72 | ``` 73 | 74 | Or if you use Turbolinks: 75 | 76 | ```js 77 | //= require foundation 78 | $(document).on('turbolinks:load', function() { 79 | $(function(){ $(document).foundation(); }); 80 | }); 81 | ``` 82 | 83 | ### Set Viewport Width 84 | 85 | Add the following line to the `head` of your page layout: 86 | 87 | ```html 88 | 89 | ``` 90 | 91 | ## Usage 92 | 93 | Run the generator to add foundation to the asset pipeline: 94 | 95 | ```shell 96 | rails g foundation:install [layout_name] [options] 97 | 98 | Options: 99 | [--haml] # Generate HAML layout instead of erb 100 | [--slim] # Generate Slim layout instead of erb 101 | Runtime options: 102 | -f, [--force] # Overwrite files that already exist 103 | -p, [--pretend] # Run but do not make any changes 104 | -q, [--quiet] # Suppress status output 105 | -s, [--skip] # Skip files that already exist 106 | ``` 107 | 108 | ## Contributing 109 | 110 | 1. Fork it 111 | 2. Create your feature branch (`git checkout -b my-new-feature`) 112 | 3. Commit your changes (`git commit -am 'Add some feature'`) 113 | 4. Push to the branch (`git push origin my-new-feature`) 114 | 5. Create new Pull Request 115 | 116 | ## Resources 117 | 118 | * [Foundation Docs](http://foundation.zurb.com/docs) 119 | * [Foundation Forum](http://foundation.zurb.com/forum) 120 | * [Foundation Training](http://zurb.com/university/courses) 121 | -------------------------------------------------------------------------------- /lib/generators/foundation/install_generator.rb: -------------------------------------------------------------------------------- 1 | require 'rails/generators' 2 | 3 | module Foundation 4 | module Generators 5 | class InstallGenerator < ::Rails::Generators::Base 6 | desc "Install Foundation within a Rails project" 7 | source_root File.join(File.dirname(__FILE__), "templates") 8 | argument :layout_name, :type => :string, :default => "application", :banner => "layout_name" 9 | 10 | class_option :haml, :desc => "Generate Haml layout instead of erb", :type => :boolean 11 | class_option :slim, :desc => "Generate Slim layout instead of erb", :type => :boolean 12 | 13 | def add_assets 14 | # rails_ujs breaks, need to incorporate rails-behavior plugin for this to work seamlessly 15 | # gsub_file "app/assets/javascripts/application#{detect_js_format[0]}", /\/\/= require jquery\n/, "" 16 | insert_into_file File.join(javascripts_base_dir, "application#{detect_js_format[0]}"), "#{detect_js_format[1]} require foundation\n", :before => "require_tree .\n" 17 | append_to_file File.join(javascripts_base_dir, "application#{detect_js_format[0]}"), "#{detect_js_format[2]}" 18 | create_app_scss 19 | insert_into_file File.join(stylesheets_base_dir, "application#{detect_css_format[0]}"), "\n#{detect_css_format[1]} require foundation_and_overrides\n", :after => "require_self" 20 | end 21 | 22 | def detect_js_format 23 | %w(.coffee .coffee.erb .js.coffee .js.coffee.erb .js .js.erb).each do |ext| 24 | if File.exist?(File.join(javascripts_base_dir, "application#{ext}")) 25 | if ext.include?(".coffee") 26 | return [ext, "#=", "\n() ->\n $(document).foundation()\n"] 27 | else 28 | return [ext, "//=", "\n$(function(){ $(document).foundation(); });\n"] 29 | end 30 | end 31 | end 32 | end 33 | 34 | def detect_css_format 35 | %w(.css .css.sass .sass .css.scss .scss).each do |ext| 36 | if File.exist?(File.join(stylesheets_base_dir, "application#{ext}")) 37 | if ext.include?(".sass") || ext.include?(".scss") 38 | return [ext, "//="] 39 | else 40 | return [ext, " *="] 41 | end 42 | end 43 | end 44 | end 45 | 46 | def create_layout 47 | if options.haml? || (defined?(Haml) && options.haml?) 48 | template "application.html.haml", File.join(layouts_base_dir, "#{file_name}.html.haml") 49 | elsif options.slim? || (defined?(Slim) && options.slim?) 50 | template "application.html.slim", File.join(layouts_base_dir, "#{file_name}.html.slim") 51 | else 52 | template "application.html.erb", File.join(layouts_base_dir, "#{file_name}.html.erb") 53 | end 54 | end 55 | 56 | def create_app_scss 57 | template "foundation_and_overrides.scss", File.join(stylesheets_base_dir, "foundation_and_overrides.scss") 58 | template "_settings.scss", File.join(stylesheets_base_dir, "_settings.scss") 59 | template "browserslist", File.join(stylesheets_base_dir, "browserslist") 60 | end 61 | 62 | private 63 | 64 | def file_name 65 | layout_name.underscore.downcase 66 | end 67 | 68 | def javascripts_base_dir 69 | File.join("app", "assets", "javascripts") 70 | end 71 | 72 | def stylesheets_base_dir 73 | File.join("app", "assets", "stylesheets") 74 | end 75 | 76 | def layouts_base_dir 77 | File.join("app", "views", "layouts") 78 | end 79 | end 80 | end 81 | end 82 | -------------------------------------------------------------------------------- /vendor/assets/scss/prototype/_position.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-position 7 | //// 8 | 9 | /// Responsive breakpoints for position helpers 10 | /// @type Boolean 11 | $prototype-position-breakpoints: $global-prototype-breakpoints !default; 12 | 13 | /// Map containing all the `position` classes 14 | /// @type Map 15 | $prototype-position: ( 16 | static, 17 | relative, 18 | absolute, 19 | fixed 20 | ) !default; 21 | 22 | /// z-index for fixed positioning 23 | /// @type Number 24 | $prototype-position-z-index: 975 !default; 25 | 26 | /// Position classes, by default coming through a map `$prototype-position`, whereas all the offset values are multiplied by `$global-position` which by default is equal to `1rem`. 27 | /// @param {String} $position [] Position classes, Either `static`, `relative`, `absolute` or `fixed` 28 | /// @param {Number} $top [null] - Top offset 29 | /// @param {Number} $right [null] - Right offset 30 | /// @param {Number} $bottom [null] - Bottom offset 31 | /// @param {Number} $left [null] - Left offset 32 | @mixin position( 33 | $position, 34 | $top: null, 35 | $right: null, 36 | $bottom: null, 37 | $left: null 38 | ) { 39 | position: $position !important; 40 | @if $top != null { 41 | top: $top * $global-position !important; 42 | } 43 | @if $right != null { 44 | right: $right * $global-position !important; 45 | } 46 | @if $bottom != null { 47 | bottom: $bottom * $global-position !important; 48 | } 49 | @if $left != null { 50 | left: $left * $global-position !important; 51 | } 52 | } 53 | 54 | /// Position Fixed on top corners 55 | /// @param {Number} $z-index [$prototype-position-z-index] z-index for `position-fixed-top` 56 | @mixin position-fixed-top( 57 | $z-index: $prototype-position-z-index 58 | ) { 59 | @include position(fixed, 0, 0, null, 0); 60 | z-index: $z-index; 61 | } 62 | 63 | /// Position Fixed on bottom corners 64 | /// @param {Number} $z-index [$prototype-position-z-index] z-index for `position-fixed-bottom` 65 | @mixin position-fixed-bottom( 66 | $z-index: $prototype-position-z-index 67 | ) { 68 | @include position(fixed, null, 0, 0, 0); 69 | z-index: $z-index; 70 | } 71 | 72 | @mixin foundation-prototype-position { 73 | // Position: Static, Relative, Fixed, Absolute 74 | @each $position in $prototype-position { 75 | .position-#{$position} { 76 | @include position($position); 77 | } 78 | } 79 | 80 | // Position: Fixed Top, Fixed Bottom 81 | .position-fixed-top { 82 | @include position-fixed-top; 83 | } 84 | .position-fixed-bottom { 85 | @include position-fixed-bottom; 86 | } 87 | 88 | @if ($prototype-position-breakpoints) { 89 | // Loop through Responsive Breakpoints 90 | @each $size in $breakpoint-classes { 91 | @include breakpoint($size) { 92 | // Position: Static, Relative, Fixed, Absolute 93 | @each $position in $prototype-position { 94 | @if $size != $-zf-zero-breakpoint { 95 | .#{$size}-position-#{$position} { 96 | @include position($position); 97 | } 98 | } 99 | } 100 | 101 | // Position: Fixed Top, Fixed Bottom 102 | @if $size != $-zf-zero-breakpoint { 103 | .#{$size}-position-fixed-top { 104 | @include position-fixed-top; 105 | } 106 | 107 | .#{$size}-position-fixed-bottom { 108 | @include position-fixed-bottom; 109 | } 110 | } 111 | } 112 | } 113 | } 114 | } 115 | -------------------------------------------------------------------------------- /vendor/assets/scss/components/_breadcrumbs.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group breadcrumbs 7 | //// 8 | 9 | /// Margin around a breadcrumbs container. 10 | /// @type Number 11 | $breadcrumbs-margin: 0 0 $global-margin 0 !default; 12 | 13 | /// Font size of breadcrumb links. 14 | /// @type Number 15 | $breadcrumbs-item-font-size: rem-calc(11) !default; 16 | 17 | /// Color of breadcrumb links. 18 | /// @type Color 19 | $breadcrumbs-item-color: $primary-color !default; 20 | 21 | /// Color of the active breadcrumb link. 22 | /// @type Color 23 | $breadcrumbs-item-color-current: $black !default; 24 | 25 | /// Opacity of disabled breadcrumb links. 26 | /// @type Number 27 | $breadcrumbs-item-color-disabled: $medium-gray !default; 28 | 29 | /// Margin between breadcrumb items. 30 | /// @type Number 31 | $breadcrumbs-item-margin: 0.75rem !default; 32 | 33 | /// If `true`, makes breadcrumb links uppercase. 34 | /// @type Boolean 35 | $breadcrumbs-item-uppercase: true !default; 36 | 37 | /// If `true`, adds a seperator between breadcrumb links. 38 | /// @type Boolean 39 | $breadcrumbs-item-separator: true !default; 40 | 41 | // If it exists $breadcrumbs-item-slash is used to build $breadcrumbs-item-separator. See the documentation. 42 | @if variable-exists(breadcrumbs-item-slash) { 43 | $breadcrumbs-item-separator: $breadcrumbs-item-slash; 44 | } 45 | 46 | /// Used character for the breadcrumb separator. 47 | /// @type Content 48 | $breadcrumbs-item-separator-item: '/' !default; 49 | 50 | /// Used character for the breadcrumb separator in rtl mode. 51 | /// @type Content 52 | $breadcrumbs-item-separator-item-rtl: '\\' !default; 53 | 54 | /// Color of breadcrumb item. 55 | /// @type Color 56 | $breadcrumbs-item-separator-color: $medium-gray !default; 57 | 58 | // If it exists $breadcrumbs-item-slash-color is used to build $breadcrumbs-item-separator-color. See the documentation. 59 | @if variable-exists(breadcrumbs-item-slash-color) { 60 | $breadcrumbs-item-separator-color: $breadcrumbs-item-slash-color; 61 | } 62 | 63 | /// Adds styles for a breadcrumbs container, along with the styles for the `
  • ` and `` elements inside of it. 64 | @mixin breadcrumbs-container { 65 | margin: $breadcrumbs-margin; 66 | list-style: none; 67 | 68 | @include clearfix; 69 | 70 | // Item wrapper 71 | li { 72 | float: #{$global-left}; 73 | 74 | font-size: $breadcrumbs-item-font-size; 75 | color: $breadcrumbs-item-color-current; 76 | cursor: default; 77 | 78 | @if $breadcrumbs-item-uppercase { 79 | text-transform: uppercase; 80 | } 81 | 82 | @if $breadcrumbs-item-separator { 83 | // Need to escape the backslash 84 | $separator: if($global-text-direction == 'ltr', $breadcrumbs-item-separator-item, $breadcrumbs-item-separator-item-rtl); 85 | 86 | &:not(:last-child) { 87 | &::after { 88 | position: relative; 89 | margin: 0 $breadcrumbs-item-margin; 90 | opacity: 1; 91 | content: $separator; 92 | color: $breadcrumbs-item-separator-color; 93 | } 94 | } 95 | } 96 | @else { 97 | margin-#{$global-right}: $breadcrumbs-item-margin; 98 | } 99 | } 100 | 101 | // Page links 102 | a { 103 | color: $breadcrumbs-item-color; 104 | 105 | &:hover { 106 | text-decoration: underline; 107 | } 108 | } 109 | } 110 | 111 | @mixin foundation-breadcrumbs { 112 | .breadcrumbs { 113 | @include breadcrumbs-container; 114 | 115 | .disabled { 116 | color: $breadcrumbs-item-color-disabled; 117 | cursor: not-allowed; 118 | } 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /vendor/assets/scss/forms/_input-group.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group forms 7 | //// 8 | 9 | /// Color of labels prefixed to an input. 10 | /// @type Color 11 | $input-prefix-color: $black !default; 12 | 13 | /// Background color of labels prefixed to an input. 14 | /// @type Color 15 | $input-prefix-background: $light-gray !default; 16 | 17 | /// Border around labels prefixed to an input. 18 | /// @type Border 19 | $input-prefix-border: 1px solid $medium-gray !default; 20 | 21 | /// Left/right padding of an pre/postfixed input label 22 | $input-prefix-padding: 1rem !default; 23 | 24 | @mixin foundation-form-prepostfix { 25 | $height: ($input-font-size * $input-line-height) + (get-side($input-padding, 'top') + get-side($input-padding, 'bottom')) - rem-calc(1); 26 | 27 | .input-group { 28 | display: if($global-flexbox, flex, table); 29 | width: 100%; 30 | margin-bottom: $form-spacing; 31 | 32 | @if $global-flexbox { 33 | align-items: stretch; 34 | } 35 | 36 | > :first-child { 37 | &, &.input-group-button > * { 38 | border-radius: if($global-text-direction == rtl, 0 $input-radius $input-radius 0, $input-radius 0 0 $input-radius); 39 | } 40 | } 41 | 42 | > :last-child { 43 | &, &.input-group-button > * { 44 | border-radius: if($global-text-direction == rtl, $input-radius 0 0 $input-radius, 0 $input-radius $input-radius 0); 45 | } 46 | } 47 | } 48 | 49 | %input-group-child { 50 | margin: 0; 51 | white-space: nowrap; 52 | 53 | @if not $global-flexbox { 54 | display: table-cell; 55 | vertical-align: middle; 56 | } 57 | } 58 | 59 | .input-group-label { 60 | @extend %input-group-child; 61 | padding: 0 $input-prefix-padding; 62 | border: $input-prefix-border; 63 | background: $input-prefix-background; 64 | 65 | color: $input-prefix-color; 66 | text-align: center; 67 | white-space: nowrap; 68 | 69 | @if $global-flexbox { 70 | display: flex; 71 | flex: 0 0 auto; 72 | align-items: center; 73 | } 74 | @else { 75 | width: 1%; 76 | height: 100%; 77 | } 78 | 79 | @if has-value($input-prefix-border) { 80 | &:first-child { 81 | border-#{$global-right}: 0; 82 | } 83 | 84 | &:last-child { 85 | border-#{$global-left}: 0; 86 | } 87 | } 88 | } 89 | 90 | .input-group-field { 91 | @extend %input-group-child; 92 | border-radius: 0; 93 | 94 | @if $global-flexbox { 95 | flex: 1 1 0px; // sass-lint:disable-line zero-unit 96 | min-width: 0; 97 | } 98 | } 99 | 100 | .input-group-button { 101 | @extend %input-group-child; 102 | padding-top: 0; 103 | padding-bottom: 0; 104 | text-align: center; 105 | 106 | @if $global-flexbox { 107 | display: flex; 108 | flex: 0 0 auto; 109 | } 110 | @else { 111 | width: 1%; 112 | height: 100%; 113 | } 114 | 115 | a, 116 | input, 117 | button, 118 | label { 119 | @extend %input-group-child; 120 | 121 | @if $global-flexbox { 122 | align-self: stretch; 123 | height: auto; 124 | } 125 | @else { 126 | height: $height; 127 | } 128 | padding-top: 0; 129 | padding-bottom: 0; 130 | font-size: $input-font-size; 131 | } 132 | } 133 | 134 | // Specificity bump needed to prevent override by buttons 135 | @if not $global-flexbox { 136 | .input-group { 137 | .input-group-button { 138 | display: table-cell; 139 | } 140 | } 141 | } 142 | } 143 | -------------------------------------------------------------------------------- /vendor/assets/scss/motion-ui/_classes.scss: -------------------------------------------------------------------------------- 1 | // scss-lint:disable ImportantRule, SpaceAfterComma, SingleLinePerProperty 2 | 3 | @mixin -motion-ui-defaults { 4 | transition-duration: map-get($motion-ui-speeds, default); 5 | transition-timing-function: map-get($motion-ui-easings, default); 6 | } 7 | 8 | // Transitions 9 | // - - - - - - - - - - - - - - - 10 | @mixin motion-ui-transitions { 11 | // Slide 12 | .slide-in-down { @include mui-slide(in, down); } 13 | .slide-in-left { @include mui-slide(in, right); } 14 | .slide-in-up { @include mui-slide(in, up); } 15 | .slide-in-right { @include mui-slide(in, left); } 16 | .slide-out-down { @include mui-slide(out, down); } 17 | .slide-out-right { @include mui-slide(out, right); } 18 | .slide-out-up { @include mui-slide(out, up); } 19 | .slide-out-left { @include mui-slide(out, left); } 20 | 21 | // Fade 22 | .fade-in { @include mui-fade(in, 0, 1); } 23 | .fade-out { @include mui-fade(out, 1, 0); } 24 | 25 | // Hinge 26 | .hinge-in-from-top { @include mui-hinge(in, top); } 27 | .hinge-in-from-right { @include mui-hinge(in, right); } 28 | .hinge-in-from-bottom { @include mui-hinge(in, bottom); } 29 | .hinge-in-from-left { @include mui-hinge(in, left); } 30 | .hinge-in-from-middle-x { @include mui-hinge(in, top, center); } 31 | .hinge-in-from-middle-y { @include mui-hinge(in, right, center); } 32 | .hinge-out-from-top { @include mui-hinge(out, top); } 33 | .hinge-out-from-right { @include mui-hinge(out, right); } 34 | .hinge-out-from-bottom { @include mui-hinge(out, bottom); } 35 | .hinge-out-from-left { @include mui-hinge(out, left); } 36 | .hinge-out-from-middle-x { @include mui-hinge(out, top, center); } 37 | .hinge-out-from-middle-y { @include mui-hinge(out, right, center); } 38 | 39 | // Scale 40 | .scale-in-up { @include mui-zoom(in, 0.5, 1); } 41 | .scale-in-down { @include mui-zoom(in, 1.5, 1); } 42 | .scale-out-up { @include mui-zoom(out, 1, 1.5); } 43 | .scale-out-down { @include mui-zoom(out, 1, 0.5); } 44 | 45 | // Spin 46 | .spin-in { @include mui-spin(in, cw); } 47 | .spin-out { @include mui-spin(out, cw); } 48 | .spin-in-ccw { @include mui-spin(in, ccw); } 49 | .spin-out-ccw { @include mui-spin(out, ccw); } 50 | 51 | // Transition Modifiers 52 | // - - - - - - - - - - - - - - - 53 | 54 | @each $name, $value in $motion-ui-speeds { 55 | @if $name != default { 56 | .#{$name} { transition-duration: $value !important; } 57 | } 58 | } 59 | 60 | @each $name, $value in $motion-ui-easings { 61 | @if $name != default { 62 | .#{$name} { transition-timing-function: $value !important; } 63 | } 64 | } 65 | 66 | @each $name, $value in $motion-ui-delays { 67 | @if $name != default { 68 | .#{$name}-delay { transition-delay: $value !important; } 69 | } 70 | } 71 | } 72 | 73 | // Animations 74 | // - - - - - - - - - - - - - - - 75 | @mixin motion-ui-animations { 76 | .shake { @include mui-animation(shake); } 77 | .spin-cw { @include mui-animation(spin); } 78 | .spin-ccw { @include mui-animation(spin(ccw)); } 79 | .wiggle { @include mui-animation(wiggle); } 80 | 81 | .shake, 82 | .spin-cw, 83 | .spin-ccw, 84 | .wiggle { 85 | animation-duration: map-get($motion-ui-speeds, default); 86 | } 87 | 88 | // Animation Modifiers 89 | // - - - - - - - - - - - - - - - 90 | .infinite { animation-iteration-count: infinite; } 91 | 92 | @each $name, $value in $motion-ui-speeds { 93 | @if $name != default { 94 | .#{$name} { animation-duration: $value !important; } 95 | } 96 | } 97 | 98 | @each $name, $value in $motion-ui-easings { 99 | @if $name != default { 100 | .#{$name} { animation-timing-function: $value !important; } 101 | } 102 | } 103 | 104 | @each $name, $value in $motion-ui-delays { 105 | @if $name != default { 106 | .#{$name}-delay { animation-delay: $value !important; } 107 | } 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /vendor/assets/scss/components/_tooltip.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group tooltip 7 | //// 8 | 9 | /// Default cursor of the defined term. 10 | /// @type Keyword 11 | $has-tip-cursor: help !default; 12 | 13 | /// Default font weight of the defined term. 14 | /// @type Keyword | Number 15 | $has-tip-font-weight: $global-weight-bold !default; 16 | 17 | /// Default border bottom of the defined term. 18 | /// @type List 19 | $has-tip-border-bottom: dotted 1px $dark-gray !default; 20 | 21 | /// Default color of the tooltip background. 22 | /// @type Color 23 | $tooltip-background-color: $black !default; 24 | 25 | /// Default color of the tooltip font. 26 | /// @type Color 27 | $tooltip-color: $white !default; 28 | 29 | /// Default padding of the tooltip background. 30 | /// @type Number 31 | $tooltip-padding: 0.75rem !default; 32 | 33 | /// Default max width for tooltips. 34 | /// @type Number 35 | $tooltip-max-width: 10rem !default; 36 | 37 | /// Default font size of the tooltip text. By default, we recommend a smaller font size than the body copy. 38 | /// @type Number 39 | $tooltip-font-size: $small-font-size !default; 40 | 41 | /// Default pip width for tooltips. 42 | /// @type Number 43 | $tooltip-pip-width: 0.75rem !default; 44 | 45 | /// Default pip height for tooltips. This is helpful for calculating the distance of the tooltip from the tooltip word. 46 | /// @type Number 47 | $tooltip-pip-height: $tooltip-pip-width * 0.866 !default; 48 | 49 | /// Default radius for tooltips. 50 | /// @type Number 51 | $tooltip-radius: $global-radius !default; 52 | 53 | @mixin has-tip { 54 | position: relative; 55 | display: inline-block; 56 | 57 | border-bottom: $has-tip-border-bottom; 58 | font-weight: $has-tip-font-weight; 59 | cursor: $has-tip-cursor; 60 | } 61 | 62 | @mixin tooltip { 63 | position: absolute; 64 | top: calc(100% + #{$tooltip-pip-height}); 65 | z-index: 1200; 66 | 67 | max-width: $tooltip-max-width; 68 | padding: $tooltip-padding; 69 | 70 | border-radius: $tooltip-radius; 71 | background-color: $tooltip-background-color; 72 | font-size: $tooltip-font-size; 73 | color: $tooltip-color; 74 | 75 | &::before { 76 | position: absolute; 77 | } 78 | 79 | &.bottom { 80 | &::before { 81 | @include css-triangle($tooltip-pip-width, $tooltip-background-color, up); 82 | bottom: 100%; 83 | } 84 | 85 | &.align-center::before { 86 | left: 50%; 87 | transform: translateX(-50%); 88 | } 89 | } 90 | 91 | &.top { 92 | &::before { 93 | @include css-triangle($tooltip-pip-width, $tooltip-background-color, down); 94 | top: 100%; 95 | bottom: auto; 96 | } 97 | 98 | &.align-center::before { 99 | left: 50%; 100 | transform: translateX(-50%); 101 | } 102 | } 103 | 104 | &.left { 105 | &::before { 106 | @include css-triangle($tooltip-pip-width, $tooltip-background-color, right); 107 | left: 100%; 108 | } 109 | 110 | &.align-center::before { 111 | bottom: auto; 112 | top: 50%; 113 | transform: translateY(-50%); 114 | } 115 | } 116 | 117 | &.right { 118 | &::before { 119 | @include css-triangle($tooltip-pip-width, $tooltip-background-color, left); 120 | right: 100%; 121 | left: auto; 122 | } 123 | 124 | &.align-center::before { 125 | bottom: auto; 126 | top: 50%; 127 | transform: translateY(-50%); 128 | } 129 | } 130 | 131 | &.align-top::before { 132 | bottom: auto; 133 | top: 10%; 134 | } 135 | 136 | &.align-bottom::before { 137 | bottom: 10%; 138 | top: auto; 139 | } 140 | 141 | &.align-left::before { 142 | left: 10%; 143 | right: auto; 144 | } 145 | 146 | &.align-right::before { 147 | left: auto; 148 | right: 10%; 149 | } 150 | } 151 | 152 | @mixin foundation-tooltip { 153 | .has-tip { 154 | @include has-tip; 155 | } 156 | 157 | .tooltip { 158 | @include tooltip; 159 | } 160 | } 161 | -------------------------------------------------------------------------------- /vendor/assets/scss/components/_drilldown.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites 2 | // https://get.foundation 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group drilldown 7 | //// 8 | 9 | /// Transition property to use for animating menus. 10 | /// @type Transition 11 | $drilldown-transition: transform 0.15s linear !default; 12 | 13 | /// Adds arrows to drilldown items with submenus, as well as the back button. 14 | /// @type Boolean 15 | $drilldown-arrows: true !default; 16 | 17 | /// Sets drilldown menu item padding. 18 | /// @type Number 19 | $drilldown-padding: $global-menu-padding !default; 20 | 21 | /// Sets drilldown menu nested margin 22 | /// @type Number 23 | $drilldown-nested-margin: 0 !default; 24 | 25 | /// Background color for drilldown top level items. 26 | /// @type Color 27 | $drilldown-background: $white !default; 28 | 29 | /// Sets drilldown menu item padding in the submenu. 30 | /// @type Number 31 | $drilldown-submenu-padding: $drilldown-padding !default; 32 | 33 | /// Background color for drilldown submenus. 34 | /// @type Color 35 | $drilldown-submenu-background: $white !default; 36 | 37 | /// Sets drilldown arrow color if arrow is used. 38 | /// @type Color 39 | $drilldown-arrow-color: $primary-color !default; 40 | 41 | /// Sets drilldown arrow size if arrow is used. 42 | /// @type Length 43 | $drilldown-arrow-size: 6px !default; 44 | 45 | @mixin zf-drilldown-left-right-arrows { 46 | .is-drilldown-submenu-parent > a { 47 | position: relative; 48 | 49 | &::after { 50 | @include css-triangle($drilldown-arrow-size, $drilldown-arrow-color, $global-right); 51 | position: absolute; 52 | top: 50%; 53 | margin-top: -1 * $drilldown-arrow-size; 54 | #{$global-right}: 1rem; 55 | } 56 | } 57 | 58 | &.align-left .is-drilldown-submenu-parent > a::after { 59 | @include css-triangle($dropdownmenu-arrow-size, $dropdownmenu-arrow-color, right); 60 | right: 1rem; 61 | left: auto; 62 | } 63 | 64 | &.align-right .is-drilldown-submenu-parent > a::after { 65 | @include css-triangle($dropdownmenu-arrow-size, $dropdownmenu-arrow-color, left); 66 | right: auto; 67 | left: 1rem; 68 | } 69 | 70 | } 71 | 72 | @mixin foundation-drilldown-menu { 73 | // Applied to the Menu container 74 | .is-drilldown { 75 | position: relative; 76 | overflow: hidden; 77 | 78 | li { 79 | display: block; 80 | } 81 | 82 | &.animate-height { 83 | transition: height 0.5s; 84 | } 85 | } 86 | 87 | // The top level
      88 | .drilldown { 89 | a { 90 | padding: $drilldown-padding; 91 | background: $drilldown-background; 92 | } 93 | 94 | // Applied to submenu
        s 95 | .is-drilldown-submenu { 96 | position: absolute; 97 | top: 0; 98 | #{$global-left}: 100%; 99 | z-index: -1; 100 | 101 | width: 100%; 102 | background: $drilldown-submenu-background; 103 | transition: $drilldown-transition; 104 | 105 | &.is-active { 106 | z-index: 1; 107 | display: block; 108 | transform: translateX(if($global-text-direction == ltr, -100%, 100%)); 109 | } 110 | 111 | &.is-closing { 112 | transform: translateX(if($global-text-direction == ltr, 100%, -100%)); 113 | } 114 | 115 | // Submenu item padding 116 | a { 117 | padding: $drilldown-submenu-padding; 118 | } 119 | } 120 | 121 | .nested.is-drilldown-submenu { 122 | @include menu-nested($drilldown-nested-margin); 123 | } 124 | 125 | .drilldown-submenu-cover-previous { 126 | min-height: 100%; 127 | } 128 | 129 | @if $drilldown-arrows { 130 | @include zf-drilldown-left-right-arrows; 131 | 132 | .js-drilldown-back > a::before { 133 | @include css-triangle($drilldown-arrow-size, $drilldown-arrow-color, $global-left); 134 | display: inline-block; 135 | vertical-align: middle; 136 | margin-#{$global-right}: 0.75rem; // Creates space between the arrow and the text 137 | } 138 | } 139 | } 140 | } 141 | --------------------------------------------------------------------------------