@finqu/cool 1.1.9 → 1.2.3

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 (82) hide show
  1. package/dist/css/cool-grid.css +2 -2
  2. package/dist/css/cool-grid.css.map +3 -3
  3. package/dist/css/cool-grid.min.css +1 -1
  4. package/dist/css/cool-grid.min.css.map +1 -1
  5. package/dist/css/cool-reboot.css +6 -2
  6. package/dist/css/cool-reboot.css.map +11 -9
  7. package/dist/css/cool-reboot.min.css +2 -2
  8. package/dist/css/cool-reboot.min.css.map +1 -1
  9. package/dist/css/cool.css +2848 -771
  10. package/dist/css/cool.css.map +33 -29
  11. package/dist/css/cool.min.css +2 -2
  12. package/dist/css/cool.min.css.map +1 -1
  13. package/dist/js/cool.bundle.js +659 -185
  14. package/dist/js/cool.bundle.js.map +1 -1
  15. package/dist/js/cool.bundle.min.js +2 -2
  16. package/dist/js/cool.bundle.min.js.map +1 -1
  17. package/dist/js/cool.esm.js +659 -185
  18. package/dist/js/cool.esm.js.map +1 -1
  19. package/dist/js/cool.esm.min.js +2 -2
  20. package/dist/js/cool.esm.min.js.map +1 -1
  21. package/dist/js/cool.js +659 -185
  22. package/dist/js/cool.js.map +1 -1
  23. package/dist/js/cool.min.js +2 -2
  24. package/dist/js/cool.min.js.map +1 -1
  25. package/html/dropdown-test.html +200 -0
  26. package/html/index.html +1418 -101
  27. package/js/dist/collapse.js +1043 -629
  28. package/js/dist/collapse.js.map +1 -1
  29. package/js/dist/common.js +876 -506
  30. package/js/dist/common.js.map +1 -1
  31. package/js/dist/dropdown.js +3451 -1867
  32. package/js/dist/dropdown.js.map +1 -1
  33. package/js/dist/popover.js +273 -58
  34. package/js/dist/popover.js.map +1 -1
  35. package/js/dist/sectiontabs.js +273 -58
  36. package/js/dist/sectiontabs.js.map +1 -1
  37. package/js/dist/select.js +10031 -3660
  38. package/js/dist/select.js.map +1 -1
  39. package/js/dist/tooltip.js +1703 -1434
  40. package/js/dist/tooltip.js.map +1 -1
  41. package/js/src/abstract-ui-component.js +16 -5
  42. package/js/src/collapse.js +24 -10
  43. package/js/src/common.js +26 -0
  44. package/js/src/dialog.js +12 -18
  45. package/js/src/dropdown.js +79 -7
  46. package/js/src/popover.js +2 -2
  47. package/js/src/section-tabs.js +2 -2
  48. package/js/src/select.js +582 -181
  49. package/js/src/toast.js +2 -2
  50. package/js/src/tooltip.js +7 -2
  51. package/js/src/util/index.js +10 -0
  52. package/package.json +21 -21
  53. package/scss/_alert.scss +79 -82
  54. package/scss/_badge.scss +16 -22
  55. package/scss/_button-group.scss +4 -0
  56. package/scss/_buttons.scss +3 -3
  57. package/scss/_custom-forms.scss +14 -12
  58. package/scss/_dialog.scss +17 -5
  59. package/scss/_dropdown.scss +1 -4
  60. package/scss/_frame.scss +24 -3
  61. package/scss/_functions.scss +10 -0
  62. package/scss/_images.scss +52 -2
  63. package/scss/_input-group.scss +12 -6
  64. package/scss/_mixins.scss +1 -0
  65. package/scss/_navbar.scss +40 -0
  66. package/scss/_notification.scss +13 -0
  67. package/scss/_reboot.scss +4 -0
  68. package/scss/_section.scss +28 -2
  69. package/scss/_select.scss +10 -1
  70. package/scss/_tables.scss +2 -1
  71. package/scss/_type.scss +37 -6
  72. package/scss/_variables.scss +6 -5
  73. package/scss/cool-grid.scss +1 -1
  74. package/scss/cool-reboot.scss +1 -1
  75. package/scss/cool.scss +3 -2
  76. package/scss/mixins/_alert-variant.scss +13 -28
  77. package/scss/mixins/_badge-variant.scss +27 -5
  78. package/scss/mixins/_notification-variant.scss +7 -0
  79. package/scss/mixins/_text-truncate.scss +77 -4
  80. package/scss/utilities/_collapse.scss +2 -2
  81. package/scss/utilities/_cursor.scss +14 -2
  82. package/scss/utilities/_text.scss +4 -2
@@ -68,6 +68,7 @@ class Dropdown extends AbstractUIComponent {
68
68
  this.minWidth = this.$el.data('minWidth') ? this.$el.data('minWidth') : this.opts.minWidth;
69
69
  this.scroll = this.$el.data('scroll') ? this.$el.data('scroll') : this.opts.scroll;
70
70
  this.scrollContentHeight = this.$el.data('scrollContentHeight') ? this.$el.data('scrollContentHeight') : this.opts.scrollContentHeight;
71
+ this.positionObserver = this.$el.attr('data-position-observer') ? JSON.parse(this.$el.attr('data-position-observer')) : this.opts.positionObserver;
71
72
  this.closeOnItemClick = this.$el.data('closeOnItemClick') ? this.$el.data('closeOnItemClick') : this.opts.closeOnItemClick;
72
73
  this.content = this.$el.data('content') ? this.$el.data('content') : this.opts.content;
73
74
  this.contentOpen = false;
@@ -247,8 +248,10 @@ class Dropdown extends AbstractUIComponent {
247
248
  let dropdownTriggerHeight = this.$el.outerHeight(true);
248
249
  let dropdownTriggerPosX = this.$el.position().left;
249
250
  let dropdownTriggerPosY = this.$el.position().top;
250
- let dropdownPosX;
251
- let dropdownPosY;
251
+ let dropdownPosX = 0;
252
+ let dropdownPosY = 0;
253
+ let offsetX = 0;
254
+ let offsetY = 0;
252
255
 
253
256
  if (placement === 'top') {
254
257
 
@@ -283,14 +286,82 @@ class Dropdown extends AbstractUIComponent {
283
286
 
284
287
  if (this.offset) {
285
288
 
286
- let offsets = this.offset.split(',')
287
- let offsetX = offsets[0];
288
- let offsetY = offsets[1];
289
+ const offsets = this.offset.split(',');
289
290
 
291
+ offsetX = offsets[0];
292
+ offsetY = offsets[1];
290
293
  dropdownPosX += parseInt(offsetX, 10);
291
294
  dropdownPosY += parseInt(offsetY, 10);
292
295
  }
293
296
 
297
+ if (this.positionObserver) {
298
+
299
+ // this is not set during init so we have to fetch it
300
+ // and let's assume that this containing parent fits and is inside
301
+ // viewport
302
+ let $containingParent = null;
303
+
304
+ do {
305
+ $containingParent = $containingParent ? $containingParent.parent() : this.$container.parent();
306
+
307
+ if (!$containingParent) {
308
+ $containingParent = $('body');
309
+ break;
310
+ }
311
+ } while ($containingParent.css('overflow-x') !== 'hidden' && $containingParent.css('overflow') !== 'hidden' && ($containingParent.prop('tagName') ? $containingParent.prop('tagName').toLowerCase() !== 'body' : false));
312
+
313
+ const containingBoundingRect = $containingParent.get(0).getBoundingClientRect();
314
+ const containerBoundingRect = this.$container.get(0).getBoundingClientRect();
315
+
316
+ if (containingBoundingRect.width < dropdownWidth) {
317
+ this.$dropdown.css('max-width', containingBoundingRect.width);
318
+ dropdownWidth = containingBoundingRect.width;
319
+ } else {
320
+ this.$dropdown.css('max-width', '');
321
+ }
322
+
323
+ if (containingBoundingRect.height < dropdownHeight) {
324
+ this.$dropdown.css('max-height', containingBoundingRect.height);
325
+ dropdownHeight = containingBoundingRect.height;
326
+ } else {
327
+ this.$dropdown.css('max-height', '');
328
+ }
329
+
330
+ const maxTop = Math.max(Math.abs(containingBoundingRect.y - containerBoundingRect.y), 0);
331
+ const maxLeft = Math.max(Math.abs(containingBoundingRect.x - containerBoundingRect.x), 0);
332
+ const maxRight = $containingParent.get(0).scrollWidth - (containerBoundingRect.x + containerBoundingRect.width);
333
+ const maxBottom = $containingParent.get(0).scrollHeight - (containerBoundingRect.y + (placement === 'dropbottom' ? containerBoundingRect.height : 0));
334
+
335
+ if (maxLeft < dropdownWidth && dropdownPosX < dropdownTriggerPosX) {
336
+ dropdownPosX = dropdownTriggerPosX;
337
+
338
+ // would be on top of the trigger
339
+ if (dropdownTriggerPosY + dropdownTriggerHeight > dropdownPosY) {
340
+ dropdownPosY = dropdownTriggerPosY + dropdownTriggerHeight + (offsetY > 0 ? offsetY : 0);
341
+ }
342
+ }
343
+
344
+ if (maxRight < dropdownWidth && dropdownPosX + dropdownWidth > dropdownTriggerPosX + dropdownTriggerWidth) {
345
+ dropdownPosX = dropdownTriggerPosX + dropdownTriggerWidth - dropdownWidth;
346
+
347
+ if (dropdownTriggerPosY + dropdownTriggerHeight > dropdownPosY) {
348
+ dropdownPosY = dropdownTriggerPosY + dropdownTriggerHeight + (offsetY > 0 ? offsetY : 0);
349
+ }
350
+ }
351
+
352
+ if (dropdownPosY < dropdownTriggerPosY && maxTop < dropdownHeight) {
353
+ dropdownPosY = dropdownTriggerPosY + dropdownTriggerHeight + offsetY;
354
+ }
355
+
356
+ if (dropdownPosY >= dropdownTriggerPosY && maxBottom < dropdownHeight) {
357
+ if (dropdownPosX >= dropdownTriggerPosX + dropdownTriggerWidth || dropdownTriggerPosX >= dropdownPosX + dropdownWidth) {
358
+ dropdownPosY = dropdownTriggerPosY - (dropdownHeight - maxBottom);
359
+ } else {
360
+ dropdownPosY = dropdownTriggerPosY - dropdownHeight - offsetY
361
+ }
362
+ }
363
+ }
364
+
294
365
  this.$dropdown.css({
295
366
  position: 'absolute',
296
367
  top: '0px',
@@ -413,9 +484,9 @@ if (typeof $ !== 'undefined') {
413
484
 
414
485
  $.fn[NAME].noConflict = () => {
415
486
 
416
- $.fn[NAME] = JQUERY_NO_CONFLICT
487
+ $.fn[NAME] = JQUERY_NO_CONFLICT;
417
488
 
418
- return Dropdown._jQueryInterface
489
+ return Dropdown._jQueryInterface;
419
490
  }
420
491
 
421
492
  $.fn[NAME].defaults = {
@@ -427,6 +498,7 @@ if (typeof $ !== 'undefined') {
427
498
  minWidth: null,
428
499
  align: 'start',
429
500
  closeOnItemClick: true,
501
+ positionObserver: true,
430
502
  content: false,
431
503
  scroll: true,
432
504
  scrollContentHeight: 100,
package/js/src/popover.js CHANGED
@@ -588,9 +588,9 @@ if (typeof $ !== 'undefined') {
588
588
 
589
589
  $.fn[NAME].noConflict = () => {
590
590
 
591
- $.fn[NAME] = JQUERY_NO_CONFLICT
591
+ $.fn[NAME] = JQUERY_NO_CONFLICT;
592
592
 
593
- return Popover._jQueryInterface
593
+ return Popover._jQueryInterface;
594
594
  }
595
595
 
596
596
  $.fn[NAME].defaults = {
@@ -188,9 +188,9 @@ if (typeof $ !== 'undefined') {
188
188
 
189
189
  $.fn[NAME].noConflict = () => {
190
190
 
191
- $.fn[NAME] = JQUERY_NO_CONFLICT
191
+ $.fn[NAME] = JQUERY_NO_CONFLICT;
192
192
 
193
- return SectionTabs._jQueryInterface
193
+ return SectionTabs._jQueryInterface;
194
194
  }
195
195
 
196
196
  $.fn[NAME].defaults = {