@finqu/cool 1.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.
Files changed (199) hide show
  1. package/README.md +1 -0
  2. package/build/.eslintrc.json +10 -0
  3. package/build/banner.js +14 -0
  4. package/build/build-plugins.js +92 -0
  5. package/build/rollup.config.js +78 -0
  6. package/dist/css/cool-grid.css +3672 -0
  7. package/dist/css/cool-grid.css.map +30 -0
  8. package/dist/css/cool-grid.min.css +7 -0
  9. package/dist/css/cool-grid.min.css.map +1 -0
  10. package/dist/css/cool-reboot.css +281 -0
  11. package/dist/css/cool-reboot.css.map +58 -0
  12. package/dist/css/cool-reboot.min.css +7 -0
  13. package/dist/css/cool-reboot.min.css.map +1 -0
  14. package/dist/css/cool.css +14841 -0
  15. package/dist/css/cool.css.map +144 -0
  16. package/dist/css/cool.min.css +7 -0
  17. package/dist/css/cool.min.css.map +1 -0
  18. package/dist/js/cool.bundle.js +15304 -0
  19. package/dist/js/cool.bundle.js.map +1 -0
  20. package/dist/js/cool.bundle.min.js +45 -0
  21. package/dist/js/cool.bundle.min.js.map +1 -0
  22. package/dist/js/cool.esm.js +4766 -0
  23. package/dist/js/cool.esm.js.map +1 -0
  24. package/dist/js/cool.esm.min.js +7 -0
  25. package/dist/js/cool.esm.min.js.map +1 -0
  26. package/dist/js/cool.js +4948 -0
  27. package/dist/js/cool.js.map +1 -0
  28. package/dist/js/cool.min.js +7 -0
  29. package/dist/js/cool.min.js.map +1 -0
  30. package/html/index.html +892 -0
  31. package/js/dist/collapse.js +321 -0
  32. package/js/dist/collapse.js.map +1 -0
  33. package/js/dist/common.js +1474 -0
  34. package/js/dist/common.js.map +1 -0
  35. package/js/dist/cooldropdown.js +467 -0
  36. package/js/dist/cooldropdown.js.map +1 -0
  37. package/js/dist/coolpopover.js +391 -0
  38. package/js/dist/coolpopover.js.map +1 -0
  39. package/js/dist/coolsectiontabs.js +256 -0
  40. package/js/dist/coolsectiontabs.js.map +1 -0
  41. package/js/dist/coolselect.js +796 -0
  42. package/js/dist/coolselect.js.map +1 -0
  43. package/js/dist/cooltooltip.js +360 -0
  44. package/js/dist/cooltooltip.js.map +1 -0
  45. package/js/dist/coolui.js +73 -0
  46. package/js/dist/coolui.js.map +1 -0
  47. package/js/dist/dropdown.js +1716 -0
  48. package/js/dist/dropdown.js.map +1 -0
  49. package/js/dist/popover.js +587 -0
  50. package/js/dist/popover.js.map +1 -0
  51. package/js/dist/sectiontabs.js +263 -0
  52. package/js/dist/sectiontabs.js.map +1 -0
  53. package/js/dist/select.js +2029 -0
  54. package/js/dist/select.js.map +1 -0
  55. package/js/dist/tooltip.js +555 -0
  56. package/js/dist/tooltip.js.map +1 -0
  57. package/js/index.esm.js +21 -0
  58. package/js/index.umd.js +21 -0
  59. package/js/src/abstract-ui-component.js +70 -0
  60. package/js/src/collapse.js +258 -0
  61. package/js/src/common.js +280 -0
  62. package/js/src/dialog.js +570 -0
  63. package/js/src/dropdown.js +443 -0
  64. package/js/src/popover.js +615 -0
  65. package/js/src/section-tabs.js +204 -0
  66. package/js/src/select.js +832 -0
  67. package/js/src/toast.js +581 -0
  68. package/js/src/tooltip.js +575 -0
  69. package/js/src/util/animate-css.js +22 -0
  70. package/js/src/util/index.js +112 -0
  71. package/js/src/util/perfect-scrollbar.js +1316 -0
  72. package/less/alert.less +345 -0
  73. package/less/badge.less +38 -0
  74. package/less/bootstrap-noconflict.less +23 -0
  75. package/less/bootstrap.less +23 -0
  76. package/less/button-group.less +153 -0
  77. package/less/buttons.less +287 -0
  78. package/less/dialog-noconflict.less +174 -0
  79. package/less/dialog.less +203 -0
  80. package/less/dropdown.less +209 -0
  81. package/less/forms.less +770 -0
  82. package/less/images.less +242 -0
  83. package/less/input-group.less +163 -0
  84. package/less/list-group.less +73 -0
  85. package/less/mixins/aspect-ratio.less +23 -0
  86. package/less/mixins/border-radius.less +24 -0
  87. package/less/mixins/box-shadow.less +4 -0
  88. package/less/mixins/buttons.less +17 -0
  89. package/less/mixins/caret.less +51 -0
  90. package/less/mixins/clearfix.less +10 -0
  91. package/less/mixins/gradients.less +34 -0
  92. package/less/mixins/nav-divider.less +7 -0
  93. package/less/mixins/object-fit.less +13 -0
  94. package/less/mixins/reset-text.less +16 -0
  95. package/less/mixins.less +11 -0
  96. package/less/package.json +11 -0
  97. package/less/pagination.less +69 -0
  98. package/less/popover.less +143 -0
  99. package/less/project.sublime-workspace +774 -0
  100. package/less/reboot.less +235 -0
  101. package/less/section.less +793 -0
  102. package/less/select.less +150 -0
  103. package/less/tables.less +737 -0
  104. package/less/tabs.less +162 -0
  105. package/less/tooltip.less +87 -0
  106. package/less/type.less +71 -0
  107. package/less/utilities/align.less +27 -0
  108. package/less/utilities/animate.less +3512 -0
  109. package/less/utilities/background.less +70 -0
  110. package/less/utilities/borders.less +16 -0
  111. package/less/utilities/color.less +70 -0
  112. package/less/utilities/cursor.less +8 -0
  113. package/less/utilities/display.less +38 -0
  114. package/less/utilities/embed.less +61 -0
  115. package/less/utilities/flex.less +76 -0
  116. package/less/utilities/jquery-ui.less +116 -0
  117. package/less/utilities/lazyload.less +29 -0
  118. package/less/utilities/overflow.less +11 -0
  119. package/less/utilities/pace.less +25 -0
  120. package/less/utilities/placeholder.less +60 -0
  121. package/less/utilities/position.less +42 -0
  122. package/less/utilities/scrollbar.less +152 -0
  123. package/less/utilities/spacing.less +197 -0
  124. package/less/utilities/text.less +68 -0
  125. package/less/utilities/transform.less +7 -0
  126. package/less/utilities.less +21 -0
  127. package/less/variables.less +343 -0
  128. package/package.json +71 -0
  129. package/scss/LISENCE +15 -0
  130. package/scss/_alert.scss +125 -0
  131. package/scss/_badge.scss +58 -0
  132. package/scss/_button-group.scss +124 -0
  133. package/scss/_buttons.scss +206 -0
  134. package/scss/_custom-forms.scss +423 -0
  135. package/scss/_dialog.scss +149 -0
  136. package/scss/_dropdown.scss +234 -0
  137. package/scss/_forms.scss +257 -0
  138. package/scss/_frame.scss +523 -0
  139. package/scss/_functions.scss +114 -0
  140. package/scss/_grid.scss +35 -0
  141. package/scss/_images.scss +312 -0
  142. package/scss/_input-group.scss +245 -0
  143. package/scss/_list-group.scss +82 -0
  144. package/scss/_mixins.scss +32 -0
  145. package/scss/_navbar.scss +214 -0
  146. package/scss/_pagination.scss +79 -0
  147. package/scss/_popover.scss +165 -0
  148. package/scss/_reboot.scss +279 -0
  149. package/scss/_root.scss +15 -0
  150. package/scss/_section.scss +851 -0
  151. package/scss/_select.scss +166 -0
  152. package/scss/_tables.scss +707 -0
  153. package/scss/_tabs.scss +175 -0
  154. package/scss/_toast.scss +182 -0
  155. package/scss/_tooltip.scss +101 -0
  156. package/scss/_type.scss +90 -0
  157. package/scss/_utilities.scss +21 -0
  158. package/scss/_variables.scss +697 -0
  159. package/scss/cool-grid.scss +29 -0
  160. package/scss/cool-reboot.scss +11 -0
  161. package/scss/cool.scss +36 -0
  162. package/scss/mixins/_alert-variant.scss +40 -0
  163. package/scss/mixins/_aspect-ratio.scss +29 -0
  164. package/scss/mixins/_background-variant.scss +25 -0
  165. package/scss/mixins/_badge-variant.scss +13 -0
  166. package/scss/mixins/_breakpoints.scss +102 -0
  167. package/scss/mixins/_buttons.scss +104 -0
  168. package/scss/mixins/_caret.scss +80 -0
  169. package/scss/mixins/_clearfix.scss +10 -0
  170. package/scss/mixins/_float.scss +14 -0
  171. package/scss/mixins/_forms.scss +51 -0
  172. package/scss/mixins/_gradients.scss +40 -0
  173. package/scss/mixins/_grid-framework.scss +72 -0
  174. package/scss/mixins/_grid.scss +60 -0
  175. package/scss/mixins/_nav-divider.scss +9 -0
  176. package/scss/mixins/_object-fit.scss +16 -0
  177. package/scss/mixins/_reset-text.scss +19 -0
  178. package/scss/mixins/_text-emphasis.scss +21 -0
  179. package/scss/mixins/_text-hide.scss +10 -0
  180. package/scss/mixins/_text-truncate.scss +8 -0
  181. package/scss/project.sublime-workspace +491 -0
  182. package/scss/utilities/_align.scss +41 -0
  183. package/scss/utilities/_animate.scss +3512 -0
  184. package/scss/utilities/_background.scss +14 -0
  185. package/scss/utilities/_borders.scss +146 -0
  186. package/scss/utilities/_clearfix.scss +6 -0
  187. package/scss/utilities/_collapse.scss +33 -0
  188. package/scss/utilities/_cursor.scss +10 -0
  189. package/scss/utilities/_display.scss +16 -0
  190. package/scss/utilities/_embed.scss +78 -0
  191. package/scss/utilities/_flex.scss +50 -0
  192. package/scss/utilities/_lazyload.scss +31 -0
  193. package/scss/utilities/_overflow.scss +6 -0
  194. package/scss/utilities/_perfect-scrollbar.scss +154 -0
  195. package/scss/utilities/_placeholder.scss +76 -0
  196. package/scss/utilities/_position.scss +30 -0
  197. package/scss/utilities/_sizing.scss +32 -0
  198. package/scss/utilities/_spacing.scss +92 -0
  199. package/scss/utilities/_text.scss +97 -0
@@ -0,0 +1,443 @@
1
+ import 'jquery';
2
+ import PerfectScrollbar from './util/perfect-scrollbar';
3
+ import { debounce, touchEvents } from './util/index';
4
+ import AbstractUIComponent from './abstract-ui-component';
5
+
6
+ const NAME = 'coolDropdown';
7
+ const DATA_KEY = 'plugin_coolDropdown';
8
+
9
+ class Dropdown extends AbstractUIComponent {
10
+
11
+ constructor(el, opts) {
12
+
13
+ super();
14
+
15
+ this.opts = {};
16
+
17
+ if (window.Cool.settings.dropdown) {
18
+
19
+ $.extend(true, this.opts, $.fn[NAME].defaults, window.Cool.settings.dropdown, opts);
20
+
21
+ } else {
22
+
23
+ $.extend(true, this.opts, $.fn[NAME].defaults, opts);
24
+ }
25
+
26
+ this.el = el;
27
+ this.debug = this.opts.debug;
28
+ this.init();
29
+ }
30
+
31
+ // Init plugin
32
+ init() {
33
+
34
+ $.when(this.buildCache()).then(() => {
35
+ this.buildScroll();
36
+ this.bindEvents();
37
+ this.onInit();
38
+ });
39
+ }
40
+
41
+ // Remove plugin instance completely
42
+ destroy() {
43
+
44
+ this.unbindEvents();
45
+ this.$el.removeData(DATA_KEY);
46
+ this.onDestroy();
47
+ }
48
+
49
+ // Update plugin data
50
+ update() {
51
+
52
+ this.buildCache();
53
+ this.onUpdate();
54
+ }
55
+
56
+ // Cache DOM nodes for performance
57
+ buildCache() {
58
+
59
+ this.$el = $(this.el);
60
+ this.$el.addClass('dropdown-trigger');
61
+ this.$container = this.$el.parent('.dropdown');
62
+ this.id = 'dropdown-'+this.generateUUID();
63
+ this.animation = this.$el.data('animation') ? this.$el.data('animation') : this.opts.animation;
64
+ this.animationIn = this.$el.data('animationIn') ? this.$el.data('animationIn') : this.opts.animationIn;
65
+ this.animationOut = this.$el.data('animationOut') ? this.$el.data('animationOut') : this.opts.animationOut;
66
+ this.animationSpeed = this.$el.data('animationSpeed') ? this.$el.data('animationSpeed') : this.opts.animationSpeed;
67
+ this.offset = this.$el.data('offset') ? this.$el.data('offset') : this.opts.offset;
68
+ this.minWidth = this.$el.data('minWidth') ? this.$el.data('minWidth') : this.opts.minWidth;
69
+ this.scroll = this.$el.data('scroll') ? this.$el.data('scroll') : this.opts.scroll;
70
+ this.scrollContentHeight = this.$el.data('scrollContentHeight') ? this.$el.data('scrollContentHeight') : this.opts.scrollContentHeight;
71
+ this.closeOnItemClick = this.$el.data('closeOnItemClick') ? this.$el.data('closeOnItemClick') : this.opts.closeOnItemClick;
72
+ this.content = this.$el.data('content') ? this.$el.data('content') : this.opts.content;
73
+ this.contentOpen = false;
74
+
75
+ if (this.$container.hasClass('dropup')) {
76
+ this.placement = 'top';
77
+ } else if (this.$container.hasClass('dropright')) {
78
+ this.placement = 'right';
79
+ } else if (this.$container.hasClass('dropbottom')) {
80
+ this.placement = 'bottom';
81
+ } else {
82
+ this.placement = 'left';
83
+ }
84
+
85
+ if (typeof this.content === 'function') {
86
+
87
+ let menuRight = this.opts.align === 'end' ? ' dropdown-menu-right' : '';
88
+
89
+ this.$dropdown = $(`
90
+ <div class="dropdown-menu${menuRight}" id="${this.id}">
91
+ ${this.content}
92
+ </div>
93
+ `);
94
+
95
+ $.when(this.$el.after(this.$dropdown)).then(() => {
96
+
97
+ this.$scrollableContent = this.$dropdown.find('.dropdown-scrollable-content') ? this.$dropdown.find('.dropdown-scrollable-content') : false;
98
+ this.$dropdown.hasClass('dropdown-menu-right') ? this.align = 'end' : this.align = 'start';
99
+ this.$dropdownItem = this.$dropdown.find('.dropdown-item');
100
+
101
+ if (this.minWidth) {
102
+ this.$dropdown.css('min-width', this.minWidth+'px');
103
+ }
104
+
105
+ this.log(this.$el);
106
+ this.log(this.$container);
107
+ this.log(this.$dropdown);
108
+ this.log(this.$scrollableContent);
109
+ this.log('Id: '+this.id);
110
+ this.log('Animation: '+this.animation);
111
+ this.log('Animation in: '+this.animationIn);
112
+ this.log('Animation out: '+this.animationOut);
113
+ this.log('Animation speed: '+this.animationSpeed);
114
+ this.log('Offset: '+this.offset);
115
+ this.log('Min width: '+this.minWidth);
116
+ this.log('Content: '+this.content);
117
+ this.log('Scroll: '+this.scroll);
118
+ this.log('Scroll content height: '+this.scrollContentHeight+'px');
119
+
120
+ return true;
121
+ });
122
+
123
+ } else {
124
+
125
+ this.$dropdown = this.$el.next('.dropdown-menu') ? this.$el.next('.dropdown-menu') : false;
126
+ this.$dropdown.hasClass('dropdown-menu-right') ? this.align = 'end' : this.align = 'start';
127
+ this.$scrollableContent = this.$dropdown.find('.dropdown-scrollable-content') ? this.$dropdown.find('.dropdown-scrollable-content') : false;
128
+ this.$dropdownItem = this.$dropdown.find('.dropdown-item');
129
+
130
+ if (this.minWidth) {
131
+ this.$dropdown.css('min-width', this.minWidth+'px');
132
+ }
133
+
134
+ this.log(this.$el);
135
+ this.log(this.$container);
136
+ this.log(this.$dropdown);
137
+ this.log(this.$scrollableContent);
138
+ this.log('Id: '+this.id);
139
+ this.log('Animation: '+this.animation);
140
+ this.log('Animation in: '+this.animationIn);
141
+ this.log('Animation out: '+this.animationOut);
142
+ this.log('Animation speed: '+this.animationSpeed);
143
+ this.log('Offset: '+this.offset);
144
+ this.log('Min width: '+this.minWidth);
145
+ this.log('Content: '+this.opts.content);
146
+ this.log('Scroll: '+this.scroll);
147
+ this.log('Scroll content height: '+this.scrollContentHeight+'px');
148
+
149
+ return true;
150
+ }
151
+ }
152
+
153
+ // Build scroll
154
+ buildScroll() {
155
+
156
+ if (this.opts.scroll && this.$scrollableContent.length) {
157
+
158
+ this.$scrollableContent.css({
159
+ 'max-height': this.scrollContentHeight+'px'
160
+ });
161
+
162
+ if (touchEvents()) {
163
+
164
+ this.$scrollableContent.css({
165
+ 'overflow-y': 'auto'
166
+ });
167
+
168
+ } else {
169
+
170
+ this.$scrollableContent.css({
171
+ 'overflow-y': 'auto'
172
+ });
173
+
174
+ this.scroll = new PerfectScrollbar(this.$scrollableContent[0], {
175
+ wheelSpeed: 1,
176
+ wheelPropagation: false,
177
+ minScrollbarLength: 20
178
+ });
179
+
180
+ this.$scrollableContent.addClass('ps-show-rail-y');
181
+ }
182
+ }
183
+ }
184
+
185
+ // Bind events that trigger methods
186
+ bindEvents() {
187
+
188
+ let self = this;
189
+
190
+ this.$el.on('click'+'.'+NAME, () => {
191
+
192
+ if (this.contentOpen) {
193
+ this.close();
194
+ } else {
195
+ this.show();
196
+ }
197
+ });
198
+
199
+ this.$dropdownItem.on('click'+'.'+NAME, function() {
200
+
201
+ if (self.closeOnItemClick) {
202
+ self.close();
203
+ }
204
+
205
+ self.onItemClick(this);
206
+ });
207
+
208
+ $(document).on('touchstart click', (e) => {
209
+
210
+ if (!this.$el.is(e.target) && !this.$dropdown.is(e.target) && this.$dropdown.has(e.target).length === 0 && this.contentOpen) {
211
+ this.close();
212
+ }
213
+ });
214
+
215
+ $(window).on('resize', debounce(() => {
216
+
217
+ this.setPosition();
218
+ this.onUpdate();
219
+ }, 250));
220
+ }
221
+
222
+ // Unbind events that trigger methods
223
+ unbindEvents() {
224
+
225
+ this.$el.off('.'+NAME);
226
+ }
227
+
228
+ // Generate UUID
229
+ generateUUID() {
230
+
231
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
232
+ let r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
233
+ return v.toString(16);
234
+ });
235
+ }
236
+
237
+ // Set positions
238
+ setPosition(placement) {
239
+
240
+ if (typeof str === 'undefined' || str === null) {
241
+ placement = this.placement;
242
+ }
243
+
244
+ let dropdownWidth = this.$dropdown.outerWidth(true);
245
+ let dropdownHeight = this.$dropdown.outerHeight(true);
246
+ let dropdownTriggerWidth = this.$el.outerWidth(true);
247
+ let dropdownTriggerHeight = this.$el.outerHeight(true);
248
+ let dropdownTriggerPosX = this.$el.position().left;
249
+ let dropdownTriggerPosY = this.$el.position().top;
250
+ let dropdownPosX;
251
+ let dropdownPosY;
252
+
253
+ if (placement === 'top') {
254
+
255
+ if (this.align === 'end') {
256
+ dropdownPosX = dropdownTriggerWidth - dropdownWidth;
257
+ } else {
258
+ dropdownPosX = dropdownTriggerPosX;
259
+ }
260
+
261
+ dropdownPosY = dropdownTriggerPosY - dropdownHeight;
262
+
263
+ } else if (placement === 'right') {
264
+
265
+ dropdownPosX = dropdownTriggerPosX + dropdownTriggerWidth;
266
+ dropdownPosY = dropdownTriggerPosY;
267
+
268
+ } else if (placement === 'bottom') {
269
+
270
+ if (this.align === 'end') {
271
+ dropdownPosX = dropdownTriggerWidth - dropdownWidth;
272
+ } else {
273
+ dropdownPosX = dropdownTriggerPosX;
274
+ }
275
+
276
+ dropdownPosY = dropdownTriggerPosY + dropdownTriggerHeight;
277
+
278
+ } else if (placement === 'left') {
279
+
280
+ dropdownPosX = dropdownTriggerPosX - dropdownWidth;
281
+ dropdownPosY = dropdownTriggerPosY;
282
+ }
283
+
284
+ if (this.offset) {
285
+
286
+ let offsets = this.offset.split(',')
287
+ let offsetX = offsets[0];
288
+ let offsetY = offsets[1];
289
+
290
+ dropdownPosX += parseInt(offsetX, 10);
291
+ dropdownPosY += parseInt(offsetY, 10);
292
+ }
293
+
294
+ this.$dropdown.css({
295
+ position: 'absolute',
296
+ top: '0px',
297
+ left: '0px',
298
+ transform: 'translate3d('+Math.round(dropdownPosX)+'px, '+Math.round(dropdownPosY)+'px, 0px)',
299
+ 'will-change': 'transform'
300
+ });
301
+
302
+ this.log('Dropdown trigger width: '+dropdownTriggerWidth+'px');
303
+ this.log('Dropdown trigger height: '+dropdownTriggerHeight+'px');
304
+ this.log('Dropdown trigger position x: '+dropdownTriggerPosX+'px');
305
+ this.log('Dropdown trigger position Y: '+dropdownTriggerPosY+'px');
306
+ this.log('Dropdown width: '+dropdownWidth+'px');
307
+ this.log('Dropdown height: '+dropdownHeight+'px');
308
+ this.log('Dropdown position x: '+dropdownPosX+'px');
309
+ this.log('Dropdown position y: '+dropdownPosY+'px');
310
+ }
311
+
312
+ // Show
313
+ show() {
314
+
315
+ if (!this.$dropdown || this.$dropdown.hasClass('show')) {
316
+ return;
317
+ }
318
+
319
+ this.setPosition();
320
+
321
+ if (this.animation) {
322
+
323
+ this.$dropdown.attr('x-placement', this.placement+'-'+this.align);
324
+ this.$dropdown.addClass(this.animationSpeed);
325
+ this.$dropdown.animateCss(this.animationIn);
326
+ this.$dropdown.addClass('show');
327
+ this.$dropdown.attr('id', this.id);
328
+ this.$el.attr('data-dropdown', this.id);
329
+
330
+ } else {
331
+
332
+ this.$dropdown.attr('x-placement', this.placement+'-'+this.align);
333
+ this.$dropdown.addClass('show');
334
+ this.$dropdown.attr('id', this.id);
335
+ this.$el.attr('data-dropdown', this.id);
336
+ }
337
+
338
+ if (this.opts.scroll && this.scroll && this.$scrollableContent.length) {
339
+ this.$scrollableContent[0].scrollTop = 1;
340
+ this.$scrollableContent[0].scrollTop = 0;
341
+ }
342
+
343
+ this.contentOpen = true;
344
+ this.onShow();
345
+ }
346
+
347
+ // Close
348
+ close() {
349
+
350
+ if (!this.$dropdown) {
351
+ return;
352
+ }
353
+
354
+ if (this.animation && !this.$dropdown.hasClass('animated')) {
355
+
356
+ this.$dropdown.animateCss(this.animationOut, () => {
357
+ this.$dropdown.removeClass('show');
358
+ this.$el.removeAttr('data-dropdown');
359
+ });
360
+
361
+ } else {
362
+
363
+ this.$dropdown.removeClass('show');
364
+ this.$el.removeAttr('data-dropdown');
365
+ }
366
+
367
+ this.contentOpen = false;
368
+ this.onClose();
369
+ }
370
+
371
+ // Item callback
372
+ onItemClick(el) {
373
+
374
+ let onItemClick = this.opts.onItemClick;
375
+
376
+ if (typeof onItemClick === 'function') {
377
+
378
+ onItemClick.call(el);
379
+ }
380
+ }
381
+
382
+ static _jQueryInterface(config) {
383
+
384
+ return this.each(function() {
385
+
386
+ let data = $(this).data(DATA_KEY);
387
+ const _config = typeof config === 'object' && config;
388
+
389
+ if (!data) {
390
+ data = new Dropdown(this, _config);
391
+ $(this).data(DATA_KEY, data);
392
+ }
393
+
394
+ if (typeof config === 'string') {
395
+
396
+ if (typeof data[config] === 'undefined') {
397
+ throw new TypeError(`No method named "${config}"`)
398
+ }
399
+
400
+ data[config]()
401
+ }
402
+ });
403
+ }
404
+ }
405
+
406
+ if (typeof $ !== 'undefined') {
407
+
408
+ // jQuery
409
+ const JQUERY_NO_CONFLICT = $.fn[NAME];
410
+
411
+ $.fn[NAME] = Dropdown._jQueryInterface;
412
+ $.fn[NAME].Constructor = Dropdown;
413
+
414
+ $.fn[NAME].noConflict = () => {
415
+
416
+ $.fn[NAME] = JQUERY_NO_CONFLICT
417
+
418
+ return Dropdown._jQueryInterface
419
+ }
420
+
421
+ $.fn[NAME].defaults = {
422
+ animation: true,
423
+ animationIn: 'zoomIn',
424
+ animationOut: 'zoomOut',
425
+ animationSpeed: 'fastest',
426
+ offset: null,
427
+ minWidth: null,
428
+ align: 'start',
429
+ closeOnItemClick: true,
430
+ content: false,
431
+ scroll: true,
432
+ scrollContentHeight: 100,
433
+ onInit: null,
434
+ onUpdate: null,
435
+ onDestroy: null,
436
+ onShow: null,
437
+ onClose: null,
438
+ onItemClick: null,
439
+ debug: false
440
+ }
441
+ }
442
+
443
+ export default Dropdown;