geico-design-kit 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of geico-design-kit might be problematic. Click here for more details.

Files changed (107) hide show
  1. package/.babelrc +5 -0
  2. package/LICENSE +0 -0
  3. package/dist/analytics.js +119 -0
  4. package/dist/appState.js +56 -0
  5. package/dist/baseComponent.js +110 -0
  6. package/dist/components/Accordion.js +312 -0
  7. package/dist/components/AddressAutoComplete.js +220 -0
  8. package/dist/components/Alert.js +145 -0
  9. package/dist/components/BackgroundPattern.js +99 -0
  10. package/dist/components/BackgroundPatternPortfolio.js +242 -0
  11. package/dist/components/ButtonSwitch.js +236 -0
  12. package/dist/components/CardSelections.js +230 -0
  13. package/dist/components/CommonQuestionsSquares.js +169 -0
  14. package/dist/components/Confirmation.js +156 -0
  15. package/dist/components/ConsolidatedSummary.js +489 -0
  16. package/dist/components/CoverageGraph.js +201 -0
  17. package/dist/components/CreditCard.js +591 -0
  18. package/dist/components/CurrencyInput.js +302 -0
  19. package/dist/components/DatePicker.js +468 -0
  20. package/dist/components/DockedMessage.js +146 -0
  21. package/dist/components/DotNavigation.js +200 -0
  22. package/dist/components/EditComponent.js +128 -0
  23. package/dist/components/EditableTable.js +113 -0
  24. package/dist/components/InPageNavigation.js +360 -0
  25. package/dist/components/Loader.js +232 -0
  26. package/dist/components/MakePayment.js +361 -0
  27. package/dist/components/Modal.js +254 -0
  28. package/dist/components/MoreInfoButton.js +227 -0
  29. package/dist/components/MultipleSelectBox.js +217 -0
  30. package/dist/components/NavigationalBox.js +161 -0
  31. package/dist/components/Navigator.js +294 -0
  32. package/dist/components/PasswordMeter.js +201 -0
  33. package/dist/components/PayPlans.js +534 -0
  34. package/dist/components/SegmentedControl.js +327 -0
  35. package/dist/components/SortableTable.js +166 -0
  36. package/dist/components/Tabs.js +1 -0
  37. package/dist/components/TextAreaCountdown.js +219 -0
  38. package/dist/components/Timeline.js +498 -0
  39. package/dist/components/TimelineFilter.js +492 -0
  40. package/dist/components/ToTopArrow.js +153 -0
  41. package/dist/components/Tooltip.js +329 -0
  42. package/dist/components/Upsell.js +168 -0
  43. package/dist/components/VIN.js +271 -0
  44. package/dist/components/ValidateForm.js +938 -0
  45. package/dist/components/ViewMoreLess.js +191 -0
  46. package/dist/components/ZipCode.js +191 -0
  47. package/dist/components/portfolio.js +99 -0
  48. package/dist/geico-design-kit.js +141 -0
  49. package/dist/global/components.js +98 -0
  50. package/dist/global/footer.js +26 -0
  51. package/dist/global/nav.js +1257 -0
  52. package/dist/services/CharacterTypeService.js +106 -0
  53. package/dist/services/UserAgentService.js +73 -0
  54. package/dist/utils.js +79 -0
  55. package/package.json +32 -0
  56. package/src/analytics.js +82 -0
  57. package/src/appState.js +56 -0
  58. package/src/baseComponent.js +156 -0
  59. package/src/components/Accordion.js +336 -0
  60. package/src/components/AddressAutoComplete.js +236 -0
  61. package/src/components/Alert.js +135 -0
  62. package/src/components/BackgroundPattern.js +96 -0
  63. package/src/components/BackgroundPatternPortfolio.js +284 -0
  64. package/src/components/ButtonSwitch.js +241 -0
  65. package/src/components/CardSelections.js +240 -0
  66. package/src/components/CommonQuestionsSquares.js +179 -0
  67. package/src/components/Confirmation.js +160 -0
  68. package/src/components/ConsolidatedSummary.js +505 -0
  69. package/src/components/CoverageGraph.js +203 -0
  70. package/src/components/CreditCard.js +595 -0
  71. package/src/components/CurrencyInput.js +321 -0
  72. package/src/components/DatePicker.js +487 -0
  73. package/src/components/DockedMessage.js +142 -0
  74. package/src/components/DotNavigation.js +206 -0
  75. package/src/components/EditComponent.js +130 -0
  76. package/src/components/EditableTable.js +106 -0
  77. package/src/components/InPageNavigation.js +391 -0
  78. package/src/components/Loader.js +272 -0
  79. package/src/components/MakePayment.js +397 -0
  80. package/src/components/Modal.js +279 -0
  81. package/src/components/MoreInfoButton.js +243 -0
  82. package/src/components/MultipleSelectBox.js +211 -0
  83. package/src/components/NavigationalBox.js +163 -0
  84. package/src/components/Navigator.js +338 -0
  85. package/src/components/PasswordMeter.js +209 -0
  86. package/src/components/PayPlans.js +604 -0
  87. package/src/components/SegmentedControl.js +365 -0
  88. package/src/components/SortableTable.js +176 -0
  89. package/src/components/Tabs.js +0 -0
  90. package/src/components/TextAreaCountdown.js +231 -0
  91. package/src/components/Timeline.js +532 -0
  92. package/src/components/TimelineFilter.js +533 -0
  93. package/src/components/ToTopArrow.js +153 -0
  94. package/src/components/Tooltip.js +344 -0
  95. package/src/components/Upsell.js +196 -0
  96. package/src/components/VIN.js +289 -0
  97. package/src/components/ValidateForm.js +1030 -0
  98. package/src/components/ViewMoreLess.js +193 -0
  99. package/src/components/ZipCode.js +193 -0
  100. package/src/components/portfolio.js +106 -0
  101. package/src/geico-design-kit.js +144 -0
  102. package/src/global/components.js +92 -0
  103. package/src/global/footer.js +25 -0
  104. package/src/global/nav.js +1457 -0
  105. package/src/services/CharacterTypeService.js +107 -0
  106. package/src/services/UserAgentService.js +59 -0
  107. package/src/utils.js +82 -0
@@ -0,0 +1,360 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+ var _baseComponent = _interopRequireDefault(require("../../src/baseComponent"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
9
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
10
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
11
+ function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
12
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
13
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
14
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
15
+ var validateSettings = [{
16
+ setting: "content",
17
+ isRequired: true,
18
+ validate: "type",
19
+ possibleValues: ["string", "object"],
20
+ errorMessage: ["GDK InPageNavigation : Content must be defined and set to a DOM selector or Node"]
21
+ }, {
22
+ setting: "onClicked",
23
+ isRequired: false,
24
+ validate: "type",
25
+ possibleValues: ["function"],
26
+ errorMessage: ["GDK InPageNavigation : onClicked must be a function"]
27
+ }, {
28
+ setting: "startingPos",
29
+ isRequired: false,
30
+ validate: "type",
31
+ possibleValues: ["number"],
32
+ errorMessage: ["GDK InPageNavigation : startingPos must be set to a number"]
33
+ }, {
34
+ setting: "autoHide",
35
+ isRequired: false,
36
+ validate: "type",
37
+ possibleValues: ["boolean"],
38
+ errorMessage: ["GDK InPageNavigation : autoHide must be set to be boolean. Default value is False."]
39
+ }];
40
+ var InPageNavigation = /*#__PURE__*/function () {
41
+ /**
42
+ * These are settings for the instantiation. Refer to the design kit section of this component for JS setting examples.
43
+ * @param {string|Object} content
44
+ * A reference to the html 'in page navigation' node
45
+ *
46
+ * @param {function} [onClicked]
47
+ * Callback function fired once a 'in-page-item' is clicked
48
+ *
49
+ * @param {number} [startingPos=1]
50
+ * The number of the navigation item to display on initialization
51
+ */
52
+
53
+ function InPageNavigation(options) {
54
+ _classCallCheck(this, InPageNavigation);
55
+ this._internalVars = {
56
+ node: null,
57
+ //used for content item
58
+ navItem: null,
59
+ marker: null
60
+ };
61
+
62
+ //options with defaults set
63
+ this._defaults = {
64
+ startingPos: 1,
65
+ autoHide: false
66
+ };
67
+
68
+ // Create options by extending defaults with the passed in arguments
69
+ if (options && _typeof(options) === "object") {
70
+ this._options = _baseComponent["default"].extendDefaults(this._defaults, options);
71
+ }
72
+
73
+ //if the required options are valid set up the environment
74
+ if (_baseComponent["default"].validateSettings(this._options, validateSettings)) {
75
+ this._internalVars.contentType = _baseComponent["default"].getContentType(this);
76
+ setLocalVars.call(this);
77
+ setEvents.call(this);
78
+ setStartPosition.call(this);
79
+ }
80
+ }
81
+
82
+ //Public Methods
83
+
84
+ /**
85
+ * @param {number} [newIndex]
86
+ * newIndex is the number of the navigation item to go to first on initialization
87
+ */
88
+ return _createClass(InPageNavigation, [{
89
+ key: "goTo",
90
+ value: function goTo(newIndex) {
91
+ var _this = this;
92
+ var index = newIndex - 1;
93
+ Array.prototype.map.call(this._internalVars.navItem, function (e, rank) {
94
+ if (rank === index) {
95
+ e.classList.add("in-page-item--selected");
96
+ var topPosition = e.offsetTop;
97
+ var nodeHeight = e.offsetHeight;
98
+
99
+ // set marker to correct position
100
+ _this._internalVars.marker.style.top = topPosition + "px";
101
+ _this._internalVars.marker.style.height = nodeHeight + "px";
102
+ } else {
103
+ e.classList.remove("in-page-item--selected");
104
+ }
105
+ });
106
+ }
107
+
108
+ /**
109
+ * destroy()
110
+ * removes the node from the dom and any events attached
111
+ */
112
+ }, {
113
+ key: "destroy",
114
+ value: function destroy() {
115
+ removeEvents.call(this);
116
+ this._internalVars.node.parentNode.removeChild(this._internalVars.node);
117
+
118
+ //a little garbage collection
119
+ for (var variableKey in this) {
120
+ if (this.hasOwnProperty(variableKey)) {
121
+ delete this[variableKey];
122
+ }
123
+ }
124
+ }
125
+ }]);
126
+ }(); // Private Methods
127
+ /**
128
+ * setLocalVars()
129
+ * set all the local vars to passed in options
130
+ */
131
+ function setLocalVars() {
132
+ //determine the type of content passed in
133
+ if (this._internalVars.contentType === 'string') {
134
+ this._internalVars.node = document.querySelector(this._options.content);
135
+ } else if (this._internalVars.contentType === 'domNode') {
136
+ this._internalVars.node = this._options.content;
137
+ }
138
+ this._internalVars.node.insertAdjacentHTML('beforeend', "<li class=\"in-page-marker\"></li>");
139
+ this._internalVars.navItem = this._internalVars.node.querySelectorAll(".in-page-item");
140
+ this._internalVars.marker = this._internalVars.node.querySelector(".in-page-marker");
141
+ this._internalVars.navId = this._internalVars.node.id;
142
+ this._internalVars.backgroundItems = [];
143
+ this._internalVars.backgroundItemsTop = [];
144
+ this._internalVars.backgroundItemsBottom = [];
145
+ this._internalVars.backgroundItemsDefined = false;
146
+ this._internalVars.handler = inPageItemClickHandler.bind(this);
147
+ }
148
+
149
+ /**
150
+ * setEvents()
151
+ * Sets all the events needed for the component
152
+ */
153
+ function setEvents() {
154
+ var _this2 = this;
155
+ var eventName = "click";
156
+
157
+ //set click events
158
+ Array.prototype.forEach.call(this._internalVars.navItem, function (el, i) {
159
+ el.addEventListener(eventName, _this2._internalVars.handler);
160
+ });
161
+ window.addEventListener('scroll', scrollPosition.bind(this));
162
+ window.addEventListener('scroll', checkNode.bind(this));
163
+ }
164
+
165
+ /**
166
+ * removeEvents()
167
+ * removes all events from the component
168
+ */
169
+ function removeEvents() {
170
+ var _this3 = this;
171
+ var eventName = "click";
172
+
173
+ //remove click events
174
+ Array.prototype.forEach.call(this._internalVars.navItem, function (el, i) {
175
+ el.removeEventListener(eventName, _this3._internalVars.handler);
176
+ });
177
+ }
178
+
179
+ /**
180
+ * if In Page Navigation Node exists, run processes
181
+ */
182
+ function checkNode() {
183
+ if (document.getElementById(this._internalVars.navId)) {
184
+ defineBackgroundItems.call(this);
185
+ }
186
+ }
187
+
188
+ /**
189
+ * Create array of all items with a bg or gradient background spanning the full width of the page
190
+ */
191
+ function defineBackgroundItems() {
192
+ var _this4 = this;
193
+ if (this._internalVars.backgroundItemsDefined === false) {
194
+ var gradientItems = document.querySelectorAll('.bg-gradient'),
195
+ coloredItems = document.querySelectorAll('.bg-color'),
196
+ crossSellItems = document.querySelectorAll('.cross-sell-image');
197
+ Array.prototype.forEach.call(gradientItems, function (el) {
198
+ if (el.clientWidth === document.body.scrollWidth) {
199
+ _this4._internalVars.backgroundItems.push(el);
200
+ }
201
+ });
202
+ Array.prototype.forEach.call(coloredItems, function (el) {
203
+ if (el.clientWidth === document.body.scrollWidth) {
204
+ _this4._internalVars.backgroundItems.push(el);
205
+ }
206
+ });
207
+ Array.prototype.forEach.call(crossSellItems, function (el) {
208
+ if (el.clientWidth === document.body.scrollWidth) {
209
+ _this4._internalVars.backgroundItems.push(el);
210
+ }
211
+ });
212
+ this._internalVars.backgroundItemsDefined = true;
213
+ }
214
+ checkBackgroundItems.call(this);
215
+ }
216
+ function checkBackgroundItems() {
217
+ var _this5 = this;
218
+ this._internalVars.backgroundItemsTop = [];
219
+ this._internalVars.backgroundItemsBottom = [];
220
+ Array.prototype.forEach.call(this._internalVars.backgroundItems, function (el) {
221
+ var top = $(el).offset().top - window.pageYOffset,
222
+ bottom = top + el.clientHeight;
223
+ if (top > 0 && top < window.innerHeight) {
224
+ addBackgroundItemsToArray.call(_this5, el);
225
+ } else if (bottom > 0 && bottom < window.innerHeight) {
226
+ addBackgroundItemsToArray.call(_this5, el);
227
+ }
228
+ });
229
+ changeNavItemColor.call(this);
230
+ }
231
+ function addBackgroundItemsToArray(el) {
232
+ var crossSellHeight = el.clientHeight / 2;
233
+ if (el.classList.contains('cross-sell-image')) {
234
+ this._internalVars.backgroundItemsTop.push($(el).offset().top + crossSellHeight);
235
+ this._internalVars.backgroundItemsBottom.push($(el).offset().top + el.clientHeight);
236
+ } else {
237
+ this._internalVars.backgroundItemsTop.push($(el).offset().top);
238
+ this._internalVars.backgroundItemsBottom.push($(el).offset().top + el.clientHeight);
239
+ }
240
+ }
241
+ function changeNavItemColor() {
242
+ var _this6 = this;
243
+ Array.prototype.forEach.call(this._internalVars.navItem, function (el) {
244
+ var top = $(el).offset().top - window.pageYOffset,
245
+ height = el.clientHeight,
246
+ changePoint = top + height / 2,
247
+ changeColor = true;
248
+ Array.prototype.forEach.call(_this6._internalVars.backgroundItems, function (ele, ind) {
249
+ if (changeColor === true) {
250
+ if (changePoint + window.pageYOffset > _this6._internalVars.backgroundItemsTop[ind] && changePoint + window.pageYOffset < _this6._internalVars.backgroundItemsBottom[ind]) {
251
+ el.classList.add('changeFontColor');
252
+ changeColor = false;
253
+ } else {
254
+ if (el.classList.contains('changeFontColor')) {
255
+ el.classList.remove('changeFontColor');
256
+ }
257
+ }
258
+ }
259
+ });
260
+ });
261
+ var component = document.getElementById(this._internalVars.navId),
262
+ navMarker = component.querySelector('.in-page-marker'),
263
+ selected = component.querySelector('.in-page-item--selected');
264
+ if (selected.classList.contains('changeFontColor')) {
265
+ navMarker.classList.add('changeFontColor');
266
+ } else {
267
+ if (navMarker.classList.contains('changeFontColor')) {
268
+ navMarker.classList.remove('changeFontColor');
269
+ }
270
+ }
271
+ }
272
+
273
+ /**
274
+ * inPageItemClickHandler()
275
+ * Opens tab content for clicked tab and hides the rest
276
+ */
277
+ function inPageItemClickHandler(el) {
278
+ var _this7 = this;
279
+ el.preventDefault();
280
+ var currentNode = el.currentTarget;
281
+
282
+ // get position and height of currentNode
283
+ var topPosition = currentNode.offsetTop;
284
+ var nodeHeight = currentNode.offsetHeight;
285
+
286
+ // add selected class
287
+ Array.prototype.map.call(this._internalVars.navItem, function (e, rank) {
288
+ if (e === currentNode) {
289
+ e.classList.add("in-page-item--selected");
290
+ } else {
291
+ e.classList.remove("in-page-item--selected");
292
+ }
293
+ });
294
+
295
+ // set marker to correct position
296
+ this._internalVars.marker.style.top = topPosition + "px";
297
+ this._internalVars.marker.style.height = nodeHeight + "px";
298
+ var currentNodeSection = currentNode.getElementsByTagName("a");
299
+ if (currentNodeSection[0].hasAttribute('data-link')) {
300
+ var getDataLink = currentNodeSection[0].getAttribute("data-link");
301
+ var section = document.getElementById(getDataLink);
302
+ if (section) {
303
+ //start will adjusting this number to a negative and go from there. Will adjust position of a.
304
+ var top = -40;
305
+ var sectionTop = section.offsetTop + top;
306
+ window.scrollTo(0, sectionTop);
307
+ }
308
+ }
309
+
310
+ // fire onClicked Callback if there is one
311
+ setTimeout(function () {
312
+ if (_this7._options.onClicked) _this7._options.onClicked(currentNode);
313
+ }, 10);
314
+ }
315
+
316
+ /**
317
+ * setStartPosition()
318
+ * Set starting link
319
+ */
320
+ function setStartPosition() {
321
+ var _this8 = this;
322
+ var linkIndex = this._options.startingPos - 1;
323
+ if (this._options.autoHide) {
324
+ if (!this._internalVars.node.classList.contains('hidden')) {
325
+ toggleComponent.call(this);
326
+ }
327
+ }
328
+ Array.prototype.map.call(this._internalVars.navItem, function (e, rank) {
329
+ if (rank === linkIndex) {
330
+ e.classList.add("in-page-item--selected");
331
+ var topPosition = e.offsetTop;
332
+ var nodeHeight = e.offsetHeight;
333
+ _this8._internalVars.marker.style.top = topPosition + "px";
334
+ _this8._internalVars.marker.style.height = nodeHeight + "px";
335
+ }
336
+ });
337
+ }
338
+
339
+ /**
340
+ * Toggle Component Function
341
+ * Displays and hides the component
342
+ */
343
+ function toggleComponent() {
344
+ if (this._internalVars.node.classList.contains('hidden')) {
345
+ this._internalVars.node.classList.remove('hidden');
346
+ } else {
347
+ this._internalVars.node.classList.add('hidden');
348
+ }
349
+ }
350
+ function scrollPosition() {
351
+ var inPageNav = this._internalVars.node;
352
+ if (inPageNav.parentNode.parentNode.getBoundingClientRect().top - 65 < 0) {
353
+ inPageNav.style.position = "fixed";
354
+ inPageNav.style.top = window.innerHeight / 2 - inPageNav.offsetHeight + "px";
355
+ } else {
356
+ inPageNav.style.position = "absolute";
357
+ inPageNav.style.top = "";
358
+ }
359
+ }
360
+ var _default = exports["default"] = InPageNavigation;
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+ var _baseComponent = _interopRequireDefault(require("../../src/baseComponent"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
9
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
10
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
11
+ function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
12
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
13
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
14
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
15
+ var validateSettings = [{
16
+ setting: "content",
17
+ isRequired: true,
18
+ validate: "type",
19
+ possibleValues: ["string", "object"],
20
+ errorMessage: ["GDK Loader : Content must be defined and set to a DOM selector or Node"]
21
+ }, {
22
+ setting: "type",
23
+ isRequired: false,
24
+ validate: "value",
25
+ possibleValues: ["inline", "section", "inline--xsmall"],
26
+ errorMessage: ["GDK Loader : Type must be defined and set to inline or section"]
27
+ }, {
28
+ setting: "autoShow",
29
+ isRequired: false,
30
+ validate: "type",
31
+ possibleValues: ["boolean"],
32
+ errorMessage: ["GDK Loader : autoShow must be a boolean"]
33
+ }];
34
+ var loaderLargeSVG = "\n <svg class=\"circle-loader\" width=\"62\" height=\"62\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"31\" cy=\"31\" r=\"29\">\n </svg>\n <span class=\"geico-icon icon-loader-g\" style=\"width: 60px; height: 60px; line-height: 60px; font-size: 30px;\"></span>\n";
35
+ var loaderSmallSVG = "\n <svg class=\"circle-loader\" width=\"32\" height=\"32\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"16\" cy=\"16\" r=\"15\">\n </svg>\n";
36
+ var loaderXSmallSVG = "\n <svg class=\"circle-loader\" width=\"20\" height=\"20\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"9\">\n </svg>\n";
37
+ var Loader = /*#__PURE__*/function () {
38
+ /**
39
+ * These are settings for the instantiation. Refer to the design kit section of this component for JS setting examples.
40
+ * @param {string|Object} content
41
+ * A reference to the loader. If the loader type is a section loader this should be a reference to the loader-container. If the loader type is a inline loader this should be a reference to the loader itself.
42
+ *
43
+ * @param {string} type
44
+ * Used to determine the type of loader. Options: "inline" || "section"
45
+ *
46
+ * @param {boolean} [autoShow=false]
47
+ * Use if you want to set loader to auto show when instantiated
48
+ *
49
+ */
50
+ function Loader(options) {
51
+ _classCallCheck(this, Loader);
52
+ this._internalVars = {
53
+ node: null,
54
+ //used for current node
55
+ loaderDom: null,
56
+ //stores reference to the loader when using a section loader
57
+ tick: 0,
58
+ loaderShouldPlay: false,
59
+ loaderSVG: null,
60
+ loaderG: null
61
+ };
62
+
63
+ //options with defaults set
64
+ this._defaults = {
65
+ autoShow: false
66
+ };
67
+
68
+ // Create options by extending defaults with the passed in arugments
69
+ if (options && _typeof(options) === "object") {
70
+ this._options = _baseComponent["default"].extendDefaults(this._defaults, options);
71
+ }
72
+
73
+ //if the required options are valid set up the environment
74
+ if (_baseComponent["default"].validateSettings(this._options, validateSettings)) {
75
+ this._internalVars.contentType = _baseComponent["default"].getContentType(this);
76
+ setLocalVars.call(this);
77
+ buildLoader.call(this);
78
+ if (this._options.autoShow) {
79
+ this.show();
80
+ }
81
+ }
82
+ }
83
+
84
+ //Public Methods
85
+
86
+ /**
87
+ * show()
88
+ * plays and animates loader
89
+ */
90
+ return _createClass(Loader, [{
91
+ key: "show",
92
+ value: function show() {
93
+ var _this = this;
94
+ this._internalVars.node.style.display = "block";
95
+ setTimeout(function () {
96
+ if (_this._options.type === "section") {
97
+ _this._internalVars.node.classList.add("section-loader--show");
98
+ _this._internalVars.loaderDom.classList.add("loader--play");
99
+ } else {
100
+ _this._internalVars.node.classList.add("inline-loader--show");
101
+ _this._internalVars.node.classList.add("loader--play");
102
+ }
103
+ _this._internalVars.loaderShouldPlay = true;
104
+ loaderAnim.call(_this);
105
+ }, 10);
106
+ }
107
+
108
+ /**
109
+ * hide()
110
+ * hides and stops the loader
111
+ */
112
+ }, {
113
+ key: "hide",
114
+ value: function hide() {
115
+ var _this2 = this;
116
+ if (this._options.type === "section") {
117
+ this._internalVars.node.classList.remove("section-loader--show");
118
+ } else {
119
+ this._internalVars.node.classList.remove("inline-loader--show");
120
+ }
121
+ setTimeout(function () {
122
+ _this2._internalVars.node.style.display = "none";
123
+ if (_this2._options.type === "section") {
124
+ _this2._internalVars.loaderDom.classList.remove("loader--play");
125
+ } else {
126
+ _this2._internalVars.node.classList.remove("loader--play");
127
+ }
128
+ _this2._internalVars.loaderShouldPlay = false;
129
+ }, 500);
130
+ }
131
+
132
+ /**
133
+ * destroy()
134
+ * removes the node from the dom and any events attached
135
+ */
136
+ }, {
137
+ key: "destroy",
138
+ value: function destroy() {
139
+ this._internalVars.node.parentNode.removeChild(this._internalVars.node);
140
+
141
+ //a little garbage collection
142
+ for (var variableKey in this) {
143
+ if (this.hasOwnProperty(variableKey)) {
144
+ delete this[variableKey];
145
+ }
146
+ }
147
+ }
148
+ }]);
149
+ }();
150
+ /**
151
+ * setLocalVars()
152
+ * set all the local vars to passed in options
153
+ */
154
+ function setLocalVars() {
155
+ //determine the type of content passed in
156
+ if (this._internalVars.contentType === 'string') {
157
+ this._internalVars.node = document.querySelector(this._options.content);
158
+ } else if (this._internalVars.contentType === 'domNode') {
159
+ this._internalVars.node = this._options.content;
160
+ }
161
+
162
+ //if its a section loader find the loader
163
+ if (this._options.type === "section") {
164
+ this._internalVars.loaderDom = this._internalVars.node.querySelector(".loader");
165
+ this._internalVars.loaderDom.style.width = "60px";
166
+ this._internalVars.loaderDom.style.height = "60px";
167
+ this._internalVars.loaderDom.style.lineHeight = "60px";
168
+ this._internalVars.loaderDom.style.fontSize = "60px";
169
+ }
170
+ }
171
+
172
+ /**
173
+ * buildLoader()
174
+ * Adds markup and classes this component
175
+ */
176
+ function buildLoader() {
177
+ if (this._options.type === "section") {
178
+ this._internalVars.loaderDom.classList.add("loader--large");
179
+ this._internalVars.loaderDom.insertAdjacentHTML('afterBegin', loaderLargeSVG);
180
+ this._internalVars.dashOffsetEnd = 180;
181
+ this._internalVars.dashArrayComplete = 183;
182
+ this._internalVars.dashArrayEnd = 153;
183
+ this._internalVars.tickSpeed = 1;
184
+ } else if (this._options.type === "inline") {
185
+ this._internalVars.node.classList.add("loader--small");
186
+ this._internalVars.node.insertAdjacentHTML('afterBegin', loaderSmallSVG);
187
+ this._internalVars.dashOffsetEnd = 92;
188
+ this._internalVars.dashArrayComplete = 95;
189
+ this._internalVars.dashArrayEnd = 153;
190
+ this._internalVars.tickSpeed = 1.5;
191
+ } else if (this._options.type === "inline--xsmall") {
192
+ this._internalVars.node.classList.add("loader--small");
193
+ this._internalVars.node.insertAdjacentHTML('afterBegin', loaderXSmallSVG);
194
+ this._internalVars.dashOffsetEnd = 62;
195
+ this._internalVars.dashArrayComplete = 65;
196
+ this._internalVars.dashArrayEnd = 153;
197
+ this._internalVars.tickSpeed = 1.5;
198
+ }
199
+ this._internalVars.loaderSVG = this._internalVars.node.querySelector(".circle-loader");
200
+ }
201
+ function loaderAnim() {
202
+ this._internalVars.tick += this._internalVars.tickSpeed;
203
+ if (this._internalVars.tick > 100) {
204
+ this._internalVars.tick = 0;
205
+ }
206
+ var t = this._internalVars.tick / 100;
207
+ var offsetStrokeDashOffset = easeInCubic(t, 0, -this._internalVars.dashOffsetEnd, 1);
208
+ var offsetStrokeDasharray = easeInCubic(t, 0, this._internalVars.dashArrayEnd, 1);
209
+ this._internalVars.loaderSVG.style.strokeDashoffset = offsetStrokeDashOffset;
210
+ this._internalVars.loaderSVG.style.strokeDasharray = "".concat(offsetStrokeDasharray, " , ").concat(this._internalVars.dashArrayComplete);
211
+ if (this._internalVars.loaderShouldPlay) {
212
+ requestAnimationFrame(loaderAnim.bind(this));
213
+ }
214
+ }
215
+
216
+ /**
217
+ * easeInQuad()
218
+ * Quadratic easing
219
+ */
220
+ function easeInQuad(t, b, c, d) {
221
+ var ts = (t /= d) * t;
222
+ return b + c * ts;
223
+ }
224
+ /**
225
+ * easeInCubic()
226
+ * Cubic easing
227
+ */
228
+ function easeInCubic(t, b, c, d) {
229
+ var ts = (t /= d) * t * t;
230
+ return b + c * ts;
231
+ }
232
+ var _default = exports["default"] = Loader;