foundation-rails 6.3.1.0 → 6.4.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (139) hide show
  1. checksums.yaml +4 -4
  2. data/bower.json +3 -3
  3. data/lib/foundation/rails/version.rb +1 -1
  4. data/lib/generators/foundation/install_generator.rb +1 -1
  5. data/lib/generators/foundation/templates/_settings.scss +291 -48
  6. data/vendor/assets/js/entries/foundation-plugins.js +25 -0
  7. data/vendor/assets/js/entries/foundation.js +101 -0
  8. data/vendor/assets/js/entries/plugins/foundation.abide.js +4 -0
  9. data/vendor/assets/js/entries/plugins/foundation.accordion.js +4 -0
  10. data/vendor/assets/js/entries/plugins/foundation.accordionMenu.js +5 -0
  11. data/vendor/assets/js/entries/plugins/foundation.core.js +21 -0
  12. data/vendor/assets/js/entries/plugins/foundation.drilldown.js +4 -0
  13. data/vendor/assets/js/entries/plugins/foundation.dropdown.js +5 -0
  14. data/vendor/assets/js/entries/plugins/foundation.dropdownMenu.js +4 -0
  15. data/vendor/assets/js/entries/plugins/foundation.equalizer.js +4 -0
  16. data/vendor/assets/js/entries/plugins/foundation.interchange.js +4 -0
  17. data/vendor/assets/js/entries/plugins/foundation.magellan.js +4 -0
  18. data/vendor/assets/js/entries/plugins/foundation.offcanvas.js +4 -0
  19. data/vendor/assets/js/entries/plugins/foundation.orbit.js +5 -0
  20. data/vendor/assets/js/entries/plugins/foundation.responsiveAccordionTabs.js +5 -0
  21. data/vendor/assets/js/entries/plugins/foundation.responsiveMenu.js +5 -0
  22. data/vendor/assets/js/entries/plugins/foundation.responsiveToggle.js +5 -0
  23. data/vendor/assets/js/entries/plugins/foundation.reveal.js +4 -0
  24. data/vendor/assets/js/entries/plugins/foundation.slider.js +5 -0
  25. data/vendor/assets/js/entries/plugins/foundation.smoothScroll.js +5 -0
  26. data/vendor/assets/js/entries/plugins/foundation.sticky.js +5 -0
  27. data/vendor/assets/js/entries/plugins/foundation.tabs.js +5 -0
  28. data/vendor/assets/js/entries/plugins/foundation.toggler.js +5 -0
  29. data/vendor/assets/js/entries/plugins/foundation.tooltip.js +4 -0
  30. data/vendor/assets/js/entries/plugins/foundation.util.box.js +4 -0
  31. data/vendor/assets/js/entries/plugins/foundation.util.imageLoader.js +5 -0
  32. data/vendor/assets/js/entries/plugins/foundation.util.keyboard.js +4 -0
  33. data/vendor/assets/js/entries/plugins/foundation.util.mediaQuery.js +4 -0
  34. data/vendor/assets/js/entries/plugins/foundation.util.motion.js +5 -0
  35. data/vendor/assets/js/entries/plugins/foundation.util.nest.js +5 -0
  36. data/vendor/assets/js/entries/plugins/foundation.util.timer.js +5 -0
  37. data/vendor/assets/js/entries/plugins/foundation.util.touch.js +7 -0
  38. data/vendor/assets/js/entries/plugins/foundation.util.triggers.js +5 -0
  39. data/vendor/assets/js/foundation.abide.js.es6 +18 -15
  40. data/vendor/assets/js/foundation.accordion.js.es6 +37 -23
  41. data/vendor/assets/js/foundation.accordionMenu.js.es6 +96 -51
  42. data/vendor/assets/js/foundation.core.js.es6 +46 -87
  43. data/vendor/assets/js/foundation.drilldown.js.es6 +47 -29
  44. data/vendor/assets/js/foundation.dropdown.js.es6 +84 -122
  45. data/vendor/assets/js/foundation.dropdownMenu.js.es6 +44 -28
  46. data/vendor/assets/js/foundation.equalizer.js.es6 +18 -17
  47. data/vendor/assets/js/foundation.interchange.js.es6 +26 -19
  48. data/vendor/assets/js/foundation.js.es6 +8 -3
  49. data/vendor/assets/js/foundation.magellan.js.es6 +36 -30
  50. data/vendor/assets/js/foundation.offcanvas.js.es6 +148 -36
  51. data/vendor/assets/js/foundation.orbit.js.es6 +26 -18
  52. data/vendor/assets/js/foundation.plugin.js.es6 +54 -0
  53. data/vendor/assets/js/foundation.positionable.js.es6 +206 -0
  54. data/vendor/assets/js/{foundation.zf.responsiveAccordionTabs.js.es6 → foundation.responsiveAccordionTabs.js.es6} +33 -30
  55. data/vendor/assets/js/foundation.responsiveMenu.js.es6 +37 -29
  56. data/vendor/assets/js/foundation.responsiveToggle.js.es6 +17 -16
  57. data/vendor/assets/js/foundation.reveal.js.es6 +61 -79
  58. data/vendor/assets/js/foundation.slider.js.es6 +33 -18
  59. data/vendor/assets/js/foundation.smoothScroll.js.es6 +135 -0
  60. data/vendor/assets/js/foundation.sticky.js.es6 +25 -17
  61. data/vendor/assets/js/foundation.tabs.js.es6 +35 -27
  62. data/vendor/assets/js/foundation.toggler.js.es6 +15 -13
  63. data/vendor/assets/js/foundation.tooltip.js.es6 +100 -108
  64. data/vendor/assets/js/foundation.util.box.js.es6 +114 -78
  65. data/vendor/assets/js/foundation.util.core.js.es6 +52 -0
  66. data/vendor/assets/js/foundation.util.imageLoader.js.es6 +45 -0
  67. data/vendor/assets/js/foundation.util.keyboard.js.es6 +41 -31
  68. data/vendor/assets/js/foundation.util.mediaQuery.js.es6 +59 -55
  69. data/vendor/assets/js/foundation.util.motion.js.es6 +4 -5
  70. data/vendor/assets/js/foundation.util.nest.js.es6 +9 -23
  71. data/vendor/assets/js/{foundation.util.timerAndImageLoader.js.es6 → foundation.util.timer.js.es6} +2 -42
  72. data/vendor/assets/js/foundation.util.touch.js.es6 +91 -294
  73. data/vendor/assets/js/foundation.util.triggers.js.es6 +199 -141
  74. data/vendor/assets/scss/_global.scss +29 -1
  75. data/vendor/assets/scss/components/_accordion-menu.scss +148 -13
  76. data/vendor/assets/scss/components/_accordion.scss +5 -0
  77. data/vendor/assets/scss/components/_breadcrumbs.scss +26 -9
  78. data/vendor/assets/scss/components/_button-group.scss +4 -4
  79. data/vendor/assets/scss/components/_button.scss +59 -12
  80. data/vendor/assets/scss/components/_card.scss +10 -2
  81. data/vendor/assets/scss/components/_drilldown.scss +90 -41
  82. data/vendor/assets/scss/components/_dropdown-menu.scss +52 -6
  83. data/vendor/assets/scss/components/_dropdown.scss +8 -1
  84. data/vendor/assets/scss/components/_flex.scss +85 -2
  85. data/vendor/assets/scss/components/_menu.scss +267 -162
  86. data/vendor/assets/scss/components/_off-canvas.scss +159 -45
  87. data/vendor/assets/scss/components/_pagination.scss +1 -1
  88. data/vendor/assets/scss/components/_reveal.scss +13 -11
  89. data/vendor/assets/scss/components/_slider.scss +0 -1
  90. data/vendor/assets/scss/components/_sticky.scss +1 -0
  91. data/vendor/assets/scss/components/_table.scss +7 -6
  92. data/vendor/assets/scss/components/_tabs.scss +1 -1
  93. data/vendor/assets/scss/components/_title-bar.scss +1 -1
  94. data/vendor/assets/scss/components/_tooltip.scss +74 -21
  95. data/vendor/assets/scss/components/_top-bar.scss +2 -0
  96. data/vendor/assets/scss/forms/_fieldset.scss +0 -1
  97. data/vendor/assets/scss/forms/_meter.scss +7 -1
  98. data/vendor/assets/scss/forms/_select.scss +4 -3
  99. data/vendor/assets/scss/forms/_text.scss +11 -2
  100. data/vendor/assets/scss/foundation.scss +17 -3
  101. data/vendor/assets/scss/grid/_flex-grid.scss +3 -52
  102. data/vendor/assets/scss/prototype/_arrow.scss +36 -0
  103. data/vendor/assets/scss/prototype/_border-box.scss +35 -0
  104. data/vendor/assets/scss/prototype/_border-none.scss +35 -0
  105. data/vendor/assets/scss/prototype/_bordered.scss +54 -0
  106. data/vendor/assets/scss/prototype/_box.scss +23 -0
  107. data/vendor/assets/scss/prototype/_display.scss +50 -0
  108. data/vendor/assets/scss/prototype/_font-styling.scss +95 -0
  109. data/vendor/assets/scss/prototype/_list-style-type.scss +95 -0
  110. data/vendor/assets/scss/prototype/_overflow.scss +72 -0
  111. data/vendor/assets/scss/prototype/_position.scss +114 -0
  112. data/vendor/assets/scss/prototype/_prototype.scss +91 -0
  113. data/vendor/assets/scss/prototype/_relation.scss +157 -0
  114. data/vendor/assets/scss/prototype/_rotate.scss +31 -0
  115. data/vendor/assets/scss/prototype/_rounded.scss +54 -0
  116. data/vendor/assets/scss/prototype/_separator.scss +96 -0
  117. data/vendor/assets/scss/prototype/_shadow.scss +43 -0
  118. data/vendor/assets/scss/prototype/_sizing.scss +73 -0
  119. data/vendor/assets/scss/prototype/_spacing.scss +204 -0
  120. data/vendor/assets/scss/prototype/_text-decoration.scss +48 -0
  121. data/vendor/assets/scss/prototype/_text-transformation.scss +48 -0
  122. data/vendor/assets/scss/prototype/_text-utilities.scss +88 -0
  123. data/vendor/assets/scss/prototype/_typescale.scss +20 -0
  124. data/vendor/assets/scss/settings/_settings.scss +291 -48
  125. data/vendor/assets/scss/typography/_base.scss +2 -2
  126. data/vendor/assets/scss/typography/_helpers.scss +6 -4
  127. data/vendor/assets/scss/util/_breakpoint.scss +60 -1
  128. data/vendor/assets/scss/util/_color.scss +8 -5
  129. data/vendor/assets/scss/util/_mixins.scss +45 -5
  130. data/vendor/assets/scss/xy-grid/_cell.scss +179 -0
  131. data/vendor/assets/scss/xy-grid/_classes.scss +455 -0
  132. data/vendor/assets/scss/xy-grid/_collapse.scss +54 -0
  133. data/vendor/assets/scss/xy-grid/_frame.scss +54 -0
  134. data/vendor/assets/scss/xy-grid/_grid.scss +56 -0
  135. data/vendor/assets/scss/xy-grid/_gutters.scss +45 -0
  136. data/vendor/assets/scss/xy-grid/_layout.scss +33 -0
  137. data/vendor/assets/scss/xy-grid/_position.scss +28 -0
  138. data/vendor/assets/scss/xy-grid/_xy-grid.scss +52 -0
  139. metadata +73 -4
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
- !function($) {
3
+ import $ from 'jquery';
4
+ import { Motion } from './foundation.util.motion';
4
5
 
5
6
  const MutationObserver = (function () {
6
7
  var prefixes = ['WebKit', 'Moz', 'O', 'Ms', ''];
@@ -17,70 +18,120 @@ const triggers = (el, type) => {
17
18
  $(`#${id}`)[ type === 'close' ? 'trigger' : 'triggerHandler'](`${type}.zf.trigger`, [el]);
18
19
  });
19
20
  };
21
+
22
+ var Triggers = {
23
+ Listeners: {
24
+ Basic: {},
25
+ Global: {}
26
+ },
27
+ Initializers: {}
28
+ }
29
+
30
+ Triggers.Listeners.Basic = {
31
+ openListener: function() {
32
+ triggers($(this), 'open');
33
+ },
34
+ closeListener: function() {
35
+ let id = $(this).data('close');
36
+ if (id) {
37
+ triggers($(this), 'close');
38
+ }
39
+ else {
40
+ $(this).trigger('close.zf.trigger');
41
+ }
42
+ },
43
+ toggleListener: function() {
44
+ let id = $(this).data('toggle');
45
+ if (id) {
46
+ triggers($(this), 'toggle');
47
+ } else {
48
+ $(this).trigger('toggle.zf.trigger');
49
+ }
50
+ },
51
+ closeableListener: function(e) {
52
+ e.stopPropagation();
53
+ let animation = $(this).data('closable');
54
+
55
+ if(animation !== ''){
56
+ Motion.animateOut($(this), animation, function() {
57
+ $(this).trigger('closed.zf');
58
+ });
59
+ }else{
60
+ $(this).fadeOut().trigger('closed.zf');
61
+ }
62
+ },
63
+ toggleFocusListener: function() {
64
+ let id = $(this).data('toggle-focus');
65
+ $(`#${id}`).triggerHandler('toggle.zf.trigger', [$(this)]);
66
+ }
67
+ };
68
+
20
69
  // Elements with [data-open] will reveal a plugin that supports it when clicked.
21
- $(document).on('click.zf.trigger', '[data-open]', function() {
22
- triggers($(this), 'open');
23
- });
70
+ Triggers.Initializers.addOpenListener = ($elem) => {
71
+ $elem.off('click.zf.trigger', Triggers.Listeners.Basic.openListener);
72
+ $elem.on('click.zf.trigger', '[data-open]', Triggers.Listeners.Basic.openListener);
73
+ }
24
74
 
25
75
  // Elements with [data-close] will close a plugin that supports it when clicked.
26
76
  // If used without a value on [data-close], the event will bubble, allowing it to close a parent component.
27
- $(document).on('click.zf.trigger', '[data-close]', function() {
28
- let id = $(this).data('close');
29
- if (id) {
30
- triggers($(this), 'close');
31
- }
32
- else {
33
- $(this).trigger('close.zf.trigger');
34
- }
35
- });
77
+ Triggers.Initializers.addCloseListener = ($elem) => {
78
+ $elem.off('click.zf.trigger', Triggers.Listeners.Basic.closeListener);
79
+ $elem.on('click.zf.trigger', '[data-close]', Triggers.Listeners.Basic.closeListener);
80
+ }
36
81
 
37
82
  // Elements with [data-toggle] will toggle a plugin that supports it when clicked.
38
- $(document).on('click.zf.trigger', '[data-toggle]', function() {
39
- let id = $(this).data('toggle');
40
- if (id) {
41
- triggers($(this), 'toggle');
42
- } else {
43
- $(this).trigger('toggle.zf.trigger');
44
- }
45
- });
83
+ Triggers.Initializers.addToggleListener = ($elem) => {
84
+ $elem.off('click.zf.trigger', Triggers.Listeners.Basic.toggleListener);
85
+ $elem.on('click.zf.trigger', '[data-toggle]', Triggers.Listeners.Basic.toggleListener);
86
+ }
46
87
 
47
88
  // Elements with [data-closable] will respond to close.zf.trigger events.
48
- $(document).on('close.zf.trigger', '[data-closable]', function(e){
49
- e.stopPropagation();
50
- let animation = $(this).data('closable');
89
+ Triggers.Initializers.addCloseableListener = ($elem) => {
90
+ $elem.off('close.zf.trigger', Triggers.Listeners.Basic.closeableListener);
91
+ $elem.on('close.zf.trigger', '[data-closeable], [data-closable]', Triggers.Listeners.Basic.closeableListener);
92
+ }
93
+
94
+ // Elements with [data-toggle-focus] will respond to coming in and out of focus
95
+ Triggers.Initializers.addToggleFocusListener = ($elem) => {
96
+ $elem.off('focus.zf.trigger blur.zf.trigger', Triggers.Listeners.Basic.toggleFocusListener);
97
+ $elem.on('focus.zf.trigger blur.zf.trigger', '[data-toggle-focus]', Triggers.Listeners.Basic.toggleFocusListener);
98
+ }
99
+
100
+
101
+
102
+ // More Global/complex listeners and triggers
103
+ Triggers.Listeners.Global = {
104
+ resizeListener: function($nodes) {
105
+ if(!MutationObserver){//fallback for IE 9
106
+ $nodes.each(function(){
107
+ $(this).triggerHandler('resizeme.zf.trigger');
108
+ });
109
+ }
110
+ //trigger all listening elements and signal a resize event
111
+ $nodes.attr('data-events', "resize");
112
+ },
113
+ scrollListener: function($nodes) {
114
+ if(!MutationObserver){//fallback for IE 9
115
+ $nodes.each(function(){
116
+ $(this).triggerHandler('scrollme.zf.trigger');
117
+ });
118
+ }
119
+ //trigger all listening elements and signal a scroll event
120
+ $nodes.attr('data-events', "scroll");
121
+ },
122
+ closeMeListener: function(e, pluginId){
123
+ let plugin = e.namespace.split('.')[0];
124
+ let plugins = $(`[data-${plugin}]`).not(`[data-yeti-box="${pluginId}"]`);
51
125
 
52
- if(animation !== ''){
53
- Foundation.Motion.animateOut($(this), animation, function() {
54
- $(this).trigger('closed.zf');
126
+ plugins.each(function(){
127
+ let _this = $(this);
128
+ _this.triggerHandler('close.zf.trigger', [_this]);
55
129
  });
56
- }else{
57
- $(this).fadeOut().trigger('closed.zf');
58
130
  }
59
- });
60
-
61
- $(document).on('focus.zf.trigger blur.zf.trigger', '[data-toggle-focus]', function() {
62
- let id = $(this).data('toggle-focus');
63
- $(`#${id}`).triggerHandler('toggle.zf.trigger', [$(this)]);
64
- });
65
-
66
- /**
67
- * Fires once after all other scripts have loaded
68
- * @function
69
- * @private
70
- */
71
- $(window).on('load', () => {
72
- checkListeners();
73
- });
74
-
75
- function checkListeners() {
76
- eventsListener();
77
- resizeListener();
78
- scrollListener();
79
- closemeListener();
80
131
  }
81
132
 
82
- //******** only fires this function once on load, if there's something to watch ********
83
- function closemeListener(pluginName) {
133
+ // Global, parses whole document.
134
+ Triggers.Initializers.addClosemeListener = function(pluginName) {
84
135
  var yetiBoxes = $('[data-yeti-box]'),
85
136
  plugNames = ['dropdown', 'tooltip', 'reveal'];
86
137
 
@@ -98,113 +149,120 @@ function closemeListener(pluginName) {
98
149
  return `closeme.zf.${name}`;
99
150
  }).join(' ');
100
151
 
101
- $(window).off(listeners).on(listeners, function(e, pluginId){
102
- let plugin = e.namespace.split('.')[0];
103
- let plugins = $(`[data-${plugin}]`).not(`[data-yeti-box="${pluginId}"]`);
152
+ $(window).off(listeners).on(listeners, Triggers.Listeners.Global.closeMeListener);
153
+ }
154
+ }
104
155
 
105
- plugins.each(function(){
106
- let _this = $(this);
156
+ function debounceGlobalListener(debounce, trigger, listener) {
157
+ let timer, args = Array.prototype.slice.call(arguments, 3);
158
+ $(window).off(trigger).on(trigger, function(e) {
159
+ if (timer) { clearTimeout(timer); }
160
+ timer = setTimeout(function(){
161
+ listener.apply(null, args);
162
+ }, debounce || 10);//default time to emit scroll event
163
+ });
164
+ }
107
165
 
108
- _this.triggerHandler('close.zf.trigger', [_this]);
109
- });
110
- });
166
+ Triggers.Initializers.addResizeListener = function(debounce){
167
+ let $nodes = $('[data-resize]');
168
+ if($nodes.length){
169
+ debounceGlobalListener(debounce, 'resize.zf.trigger', Triggers.Listeners.Global.resizeListener, $nodes);
111
170
  }
112
171
  }
113
172
 
114
- function resizeListener(debounce){
115
- let timer,
116
- $nodes = $('[data-resize]');
173
+ Triggers.Initializers.addScrollListener = function(debounce){
174
+ let $nodes = $('[data-scroll]');
117
175
  if($nodes.length){
118
- $(window).off('resize.zf.trigger')
119
- .on('resize.zf.trigger', function(e) {
120
- if (timer) { clearTimeout(timer); }
176
+ debounceGlobalListener(debounce, 'scroll.zf.trigger', Triggers.Listeners.Global.scrollListener, $nodes);
177
+ }
178
+ }
179
+
180
+ Triggers.Initializers.addMutationEventsListener = function($elem) {
181
+ if(!MutationObserver){ return false; }
182
+ let $nodes = $elem.find('[data-resize], [data-scroll], [data-mutate]');
121
183
 
122
- timer = setTimeout(function(){
184
+ //element callback
185
+ var listeningElementsMutation = function (mutationRecordsList) {
186
+ var $target = $(mutationRecordsList[0].target);
123
187
 
124
- if(!MutationObserver){//fallback for IE 9
125
- $nodes.each(function(){
126
- $(this).triggerHandler('resizeme.zf.trigger');
127
- });
188
+ //trigger the event handler for the element depending on type
189
+ switch (mutationRecordsList[0].type) {
190
+ case "attributes":
191
+ if ($target.attr("data-events") === "scroll" && mutationRecordsList[0].attributeName === "data-events") {
192
+ $target.triggerHandler('scrollme.zf.trigger', [$target, window.pageYOffset]);
128
193
  }
129
- //trigger all listening elements and signal a resize event
130
- $nodes.attr('data-events', "resize");
131
- }, debounce || 10);//default time to emit resize event
132
- });
194
+ if ($target.attr("data-events") === "resize" && mutationRecordsList[0].attributeName === "data-events") {
195
+ $target.triggerHandler('resizeme.zf.trigger', [$target]);
196
+ }
197
+ if (mutationRecordsList[0].attributeName === "style") {
198
+ $target.closest("[data-mutate]").attr("data-events","mutate");
199
+ $target.closest("[data-mutate]").triggerHandler('mutateme.zf.trigger', [$target.closest("[data-mutate]")]);
200
+ }
201
+ break;
202
+
203
+ case "childList":
204
+ $target.closest("[data-mutate]").attr("data-events","mutate");
205
+ $target.closest("[data-mutate]").triggerHandler('mutateme.zf.trigger', [$target.closest("[data-mutate]")]);
206
+ break;
207
+
208
+ default:
209
+ return false;
210
+ //nothing
211
+ }
212
+ };
213
+
214
+ if ($nodes.length) {
215
+ //for each element that needs to listen for resizing, scrolling, or mutation add a single observer
216
+ for (var i = 0; i <= $nodes.length - 1; i++) {
217
+ var elementObserver = new MutationObserver(listeningElementsMutation);
218
+ elementObserver.observe($nodes[i], { attributes: true, childList: true, characterData: false, subtree: true, attributeFilter: ["data-events", "style"] });
219
+ }
133
220
  }
134
221
  }
135
222
 
136
- function scrollListener(debounce){
137
- let timer,
138
- $nodes = $('[data-scroll]');
139
- if($nodes.length){
140
- $(window).off('scroll.zf.trigger')
141
- .on('scroll.zf.trigger', function(e){
142
- if(timer){ clearTimeout(timer); }
223
+ Triggers.Initializers.addSimpleListeners = function() {
224
+ let $document = $(document);
143
225
 
144
- timer = setTimeout(function(){
226
+ Triggers.Initializers.addOpenListener($document);
227
+ Triggers.Initializers.addCloseListener($document);
228
+ Triggers.Initializers.addToggleListener($document);
229
+ Triggers.Initializers.addCloseableListener($document);
230
+ Triggers.Initializers.addToggleFocusListener($document);
145
231
 
146
- if(!MutationObserver){//fallback for IE 9
147
- $nodes.each(function(){
148
- $(this).triggerHandler('scrollme.zf.trigger');
149
- });
150
- }
151
- //trigger all listening elements and signal a scroll event
152
- $nodes.attr('data-events', "scroll");
153
- }, debounce || 10);//default time to emit scroll event
154
- });
155
- }
156
232
  }
157
233
 
158
- function eventsListener() {
159
- if(!MutationObserver){ return false; }
160
- let nodes = document.querySelectorAll('[data-resize], [data-scroll], [data-mutate]');
234
+ Triggers.Initializers.addGlobalListeners = function() {
235
+ let $document = $(document);
236
+ Triggers.Initializers.addMutationEventsListener($document);
237
+ Triggers.Initializers.addResizeListener();
238
+ Triggers.Initializers.addScrollListener();
239
+ Triggers.Initializers.addClosemeListener();
240
+ }
161
241
 
162
- //element callback
163
- var listeningElementsMutation = function (mutationRecordsList) {
164
- var $target = $(mutationRecordsList[0].target);
165
-
166
- //trigger the event handler for the element depending on type
167
- switch (mutationRecordsList[0].type) {
168
-
169
- case "attributes":
170
- if ($target.attr("data-events") === "scroll" && mutationRecordsList[0].attributeName === "data-events") {
171
- $target.triggerHandler('scrollme.zf.trigger', [$target, window.pageYOffset]);
172
- }
173
- if ($target.attr("data-events") === "resize" && mutationRecordsList[0].attributeName === "data-events") {
174
- $target.triggerHandler('resizeme.zf.trigger', [$target]);
175
- }
176
- if (mutationRecordsList[0].attributeName === "style") {
177
- $target.closest("[data-mutate]").attr("data-events","mutate");
178
- $target.closest("[data-mutate]").triggerHandler('mutateme.zf.trigger', [$target.closest("[data-mutate]")]);
179
- }
180
- break;
181
-
182
- case "childList":
183
- $target.closest("[data-mutate]").attr("data-events","mutate");
184
- $target.closest("[data-mutate]").triggerHandler('mutateme.zf.trigger', [$target.closest("[data-mutate]")]);
185
- break;
186
-
187
- default:
188
- return false;
189
- //nothing
190
- }
191
- };
192
-
193
- if (nodes.length) {
194
- //for each element that needs to listen for resizing, scrolling, or mutation add a single observer
195
- for (var i = 0; i <= nodes.length - 1; i++) {
196
- var elementObserver = new MutationObserver(listeningElementsMutation);
197
- elementObserver.observe(nodes[i], { attributes: true, childList: true, characterData: false, subtree: true, attributeFilter: ["data-events", "style"] });
198
- }
242
+
243
+ Triggers.init = function($, Foundation) {
244
+ if (typeof($.triggersInitialized) === 'undefined') {
245
+ let $document = $(document);
246
+
247
+ if(document.readyState === "complete") {
248
+ Triggers.Initializers.addSimpleListeners();
249
+ Triggers.Initializers.addGlobalListeners();
250
+ } else {
251
+ $(window).on('load', () => {
252
+ Triggers.Initializers.addSimpleListeners();
253
+ Triggers.Initializers.addGlobalListeners();
254
+ });
199
255
  }
200
- }
201
256
 
202
- // ------------------------------------
203
257
 
204
- // [PH]
205
- // Foundation.CheckWatchers = checkWatchers;
206
- Foundation.IHearYou = checkListeners;
207
- // Foundation.ISeeYou = scrollListener;
208
- // Foundation.IFeelYou = closemeListener;
258
+ $.triggersInitialized = true;
259
+ }
260
+
261
+ if(Foundation) {
262
+ Foundation.Triggers = Triggers;
263
+ // Legacy included to be backwards compatible for now.
264
+ Foundation.IHearYou = Triggers.Initializers.addGlobalListeners
265
+ }
266
+ }
209
267
 
210
- }(jQuery);
268
+ export {Triggers};
@@ -74,6 +74,10 @@ $global-margin: 1rem !default;
74
74
  /// @type Number
75
75
  $global-padding: 1rem !default;
76
76
 
77
+ /// Global value used for positioning on components.
78
+ /// @type Number
79
+ $global-position: 1rem !default;
80
+
77
81
  /// Global font weight used for normal type.
78
82
  /// @type Keyword | Number
79
83
  $global-weight-normal: normal !default;
@@ -86,13 +90,24 @@ $global-weight-bold: bold !default;
86
90
  /// @type Number
87
91
  $global-radius: 0 !default;
88
92
 
93
+ /// Global value used for all menu styles. Can be overwritten at individual menu component level.
94
+ /// @type Number
95
+ $global-menu-padding: 0.7rem 1rem !default;
96
+
97
+ /// Global value used for all menu styles. Nested margin for submenu.
98
+ $global-menu-nested-margin: 1rem !default;
99
+
89
100
  /// Sets the text direction of the CSS. Can be either `ltr` or `rtl`.
90
101
  /// @type Keyword
91
102
  $global-text-direction: ltr !default;
92
103
 
93
104
  /// Enables flexbox for components that support it.
94
105
  /// @type Boolean
95
- $global-flexbox: false !default;
106
+ $global-flexbox: true !default;
107
+
108
+ /// Enabled responsive breakpoints for prototypes if applicable
109
+ /// @type Boolean
110
+ $global-prototype-breakpoints: false !default;
96
111
 
97
112
  @if not map-has-key($foundation-palette, primary) {
98
113
  @error 'In $foundation-palette, you must have a color named "primary".';
@@ -102,6 +117,10 @@ $global-flexbox: false !default;
102
117
  $global-left: if($global-text-direction == rtl, right, left);
103
118
  $global-right: if($global-text-direction == rtl, left, right);
104
119
 
120
+ /// Global tolerance for color pick contrast.
121
+ /// @type Number
122
+ $global-color-pick-contrast-tolerance: 0 !default;
123
+
105
124
  // Internal variables used for colors
106
125
  $primary-color: get-color(primary);
107
126
  $secondary-color: get-color(secondary);
@@ -202,6 +221,15 @@ $alert-color: get-color(alert);
202
221
  overflow: auto;
203
222
  }
204
223
 
224
+ // Make reset inherit font-family instead of settings sans-serif
225
+ button,
226
+ input,
227
+ optgroup,
228
+ select,
229
+ textarea {
230
+ font-family: inherit;
231
+ }
232
+
205
233
  // Internal classes to show/hide elements in JavaScript
206
234
  .is-visible {
207
235
  display: block !important;