@dialpad/dialtone-vue 2.54.0 → 2.54.2

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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [2.54.2](https://github.com/dialpad/dialtone-vue/compare/v2.54.1...v2.54.2) (2023-01-26)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **Popover:** fix prevent scroll logic ([#722](https://github.com/dialpad/dialtone-vue/issues/722)) ([7a1ed16](https://github.com/dialpad/dialtone-vue/commit/7a1ed16d0008a3f2c3a640fe5ac3c68b285d8ab5))
7
+
8
+ ## [2.54.1](https://github.com/dialpad/dialtone-vue/compare/v2.54.0...v2.54.1) (2023-01-26)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **Modal:** fix modal focusFirstElement method ([#720](https://github.com/dialpad/dialtone-vue/issues/720)) ([0bc9205](https://github.com/dialpad/dialtone-vue/commit/0bc9205b42787c7328925175348f0dd9bc39b122))
14
+
1
15
  # [2.54.0](https://github.com/dialpad/dialtone-vue/compare/v2.53.1...v2.54.0) (2023-01-26)
2
16
 
3
17
 
@@ -4270,7 +4270,7 @@ const focusableElementsList = `button,[href],input,select,textarea,details,[tabi
4270
4270
  * will default to the root node of the vue component
4271
4271
  */
4272
4272
  async focusFirstElement(el) {
4273
- const elToFocus = this.getFirstFocusableElement(el);
4273
+ const elToFocus = await this.getFirstFocusableElement(el);
4274
4274
  elToFocus === null || elToFocus === void 0 ? void 0 : elToFocus.focus({
4275
4275
  preventScroll: true
4276
4276
  });
@@ -7990,8 +7990,8 @@ return [_c('ul',{ref:"listWrapper",class:_vm.listClasses,attrs:{"id":_vm.listId,
7990
7990
  var dropdownvue_type_template_id_5944f754_staticRenderFns = []
7991
7991
 
7992
7992
 
7993
- ;// CONCATENATED MODULE: ./node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/popover/popover.vue?vue&type=template&id=64e7122e&
7994
- var popovervue_type_template_id_64e7122e_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.modal && _vm.isOpen)?_c('portal',[_c('div',{staticClass:"d-modal--transparent",attrs:{"aria-hidden":_vm.modal && _vm.isOpen ? 'false' : 'true'},on:{"click":function($event){$event.preventDefault();$event.stopPropagation();}}})]):_vm._e(),_c(_vm.elementType,_vm._g({ref:"popover",tag:"component",class:['d-popover', { 'd-popover__anchor--opened': _vm.isOpen }],attrs:{"data-qa":"dt-popover-container"}},_vm.$listeners),[_c('div',{ref:"anchor",attrs:{"id":!_vm.ariaLabelledby && _vm.labelledBy,"data-qa":"dt-popover-anchor","tabindex":_vm.openOnContext ? 0 : undefined},on:{"!click":function($event){return _vm.defaultToggleOpen.apply(null, arguments)},"contextmenu":_vm.onContext,"keydown":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"up",38,$event.key,["Up","ArrowUp"])){ return null; }$event.preventDefault();return _vm.onArrowKeyPress.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"down",40,$event.key,["Down","ArrowDown"])){ return null; }$event.preventDefault();return _vm.onArrowKeyPress.apply(null, arguments)}],"!keydown":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"escape",undefined,$event.key,undefined)){ return null; }return _vm.closePopover.apply(null, arguments)}}},[_vm._t("anchor",null,{"attrs":{
7993
+ ;// CONCATENATED MODULE: ./node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/popover/popover.vue?vue&type=template&id=fec53cb4&
7994
+ var popovervue_type_template_id_fec53cb4_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.modal && _vm.isOpen)?_c('portal',[_c('div',{staticClass:"d-modal--transparent",attrs:{"aria-hidden":_vm.modal && _vm.isOpen ? 'false' : 'true'},on:{"click":function($event){$event.preventDefault();$event.stopPropagation();}}})]):_vm._e(),_c(_vm.elementType,_vm._g({ref:"popover",tag:"component",class:['d-popover', { 'd-popover__anchor--opened': _vm.isOpen }],attrs:{"data-qa":"dt-popover-container"}},_vm.$listeners),[_c('div',{ref:"anchor",attrs:{"id":!_vm.ariaLabelledby && _vm.labelledBy,"data-qa":"dt-popover-anchor","tabindex":_vm.openOnContext ? 0 : undefined},on:{"!click":function($event){return _vm.defaultToggleOpen.apply(null, arguments)},"contextmenu":_vm.onContext,"keydown":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"up",38,$event.key,["Up","ArrowUp"])){ return null; }$event.preventDefault();return _vm.onArrowKeyPress.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"down",40,$event.key,["Down","ArrowDown"])){ return null; }$event.preventDefault();return _vm.onArrowKeyPress.apply(null, arguments)}],"!keydown":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"escape",undefined,$event.key,undefined)){ return null; }return _vm.closePopover.apply(null, arguments)}}},[_vm._t("anchor",null,{"attrs":{
7995
7995
  'aria-expanded': _vm.isOpen.toString(),
7996
7996
  'aria-controls': _vm.id,
7997
7997
  'aria-haspopup': _vm.role,
@@ -8002,7 +8002,7 @@ var popovervue_type_template_id_64e7122e_render = function () {var _vm=this;var
8002
8002
  'd-popover__content',
8003
8003
  _vm.POPOVER_PADDING_CLASSES[_vm.padding],
8004
8004
  _vm.contentClass ],attrs:{"data-qa":"dt-popover-content"}},[_vm._t("content",null,{"close":_vm.closePopover})],2),(_vm.$slots.footerContent)?_c('popover-header-footer',{ref:"popover__footer",class:_vm.POPOVER_HEADER_FOOTER_PADDING_CLASSES[_vm.padding],attrs:{"type":"footer","content-class":_vm.footerClass},scopedSlots:_vm._u([{key:"content",fn:function(){return [_vm._t("footerContent",null,{"close":_vm.closePopover})]},proxy:true}],null,true)}):_vm._e(),(_vm.showVisuallyHiddenClose)?_c('sr-only-close-button',{attrs:{"visually-hidden-close-label":_vm.visuallyHiddenCloseLabel},on:{"close":_vm.closePopover}}):_vm._e()],1)],1)],1)}
8005
- var popovervue_type_template_id_64e7122e_staticRenderFns = []
8005
+ var popovervue_type_template_id_fec53cb4_staticRenderFns = []
8006
8006
 
8007
8007
 
8008
8008
  ;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js
@@ -13413,9 +13413,11 @@ var popover_header_footer_component = normalizeComponent(
13413
13413
  isOpen(isOpen, isPrev) {
13414
13414
  if (isOpen) {
13415
13415
  this.initTippyInstance();
13416
+ this.preventScrolling();
13416
13417
  } else if (!isOpen && isPrev !== isOpen) {
13417
13418
  this.removeEventListeners();
13418
13419
  this.tip.hide();
13420
+ this.enableScrolling();
13419
13421
  }
13420
13422
  }
13421
13423
 
@@ -13516,10 +13518,7 @@ var popover_header_footer_component = normalizeComponent(
13516
13518
  },
13517
13519
 
13518
13520
  addEventListeners() {
13519
- window.addEventListener('dt-popover-close', this.closePopover);
13520
- window.addEventListener('wheel', this.preventScrolling, {
13521
- passive: false
13522
- }); // align popover content width when contentWidth is 'anchor'
13521
+ window.addEventListener('dt-popover-close', this.closePopover); // align popover content width when contentWidth is 'anchor'
13523
13522
 
13524
13523
  if (this.contentWidth === 'anchor') {
13525
13524
  window.addEventListener('resize', this.onResize);
@@ -13528,9 +13527,6 @@ var popover_header_footer_component = normalizeComponent(
13528
13527
 
13529
13528
  removeEventListeners() {
13530
13529
  window.removeEventListener('dt-popover-close', this.closePopover);
13531
- window.removeEventListener('wheel', this.preventScrolling, {
13532
- passive: false
13533
- });
13534
13530
 
13535
13531
  if (this.contentWidth === 'anchor') {
13536
13532
  window.removeEventListener('resize', this.onResize);
@@ -13542,11 +13538,40 @@ var popover_header_footer_component = normalizeComponent(
13542
13538
  },
13543
13539
 
13544
13540
  /*
13545
- * Prevents scrolling only when the popover is set to modal
13541
+ * Prevents scrolling outside of the currently opened modal popover by:
13542
+ * - when anchor is not within another popover: setting the body to overflow: hidden
13543
+ * - when anchor is within another popover: set the popover dialog container to it's non-modal z-index
13544
+ * since it is no longer the active modal. This puts it underneath the overlay and prevents scrolling.
13546
13545
  **/
13547
- preventScrolling(e) {
13548
- if (!this.modal || this.$refs.content.$el.contains(e.target)) return;
13549
- e.preventDefault();
13546
+ async preventScrolling() {
13547
+ await this.$nextTick();
13548
+
13549
+ if (this.modal) {
13550
+ const element = this.anchorEl.closest('body, .tippy-box');
13551
+
13552
+ if (element.tagName.toLowerCase() === 'body') {
13553
+ element.classList.add('d-of-hidden');
13554
+ } else {
13555
+ element.classList.add('d-zi-popover');
13556
+ }
13557
+ }
13558
+ },
13559
+
13560
+ /*
13561
+ * Resets the prevent scrolling properties set in preventScrolling() back to normal.
13562
+ **/
13563
+ async enableScrolling() {
13564
+ await this.$nextTick();
13565
+
13566
+ if (this.modal) {
13567
+ const element = this.anchorEl.closest('body, .tippy-box');
13568
+
13569
+ if (element.tagName.toLowerCase() === 'body') {
13570
+ element.classList.remove('d-of-hidden');
13571
+ } else {
13572
+ element.classList.remove('d-zi-popover');
13573
+ }
13574
+ }
13550
13575
  },
13551
13576
 
13552
13577
  removeReferences() {
@@ -13713,8 +13738,8 @@ var popovervue_type_style_index_0_lang_less_ = __webpack_require__(230);
13713
13738
 
13714
13739
  var popover_component = normalizeComponent(
13715
13740
  popover_popovervue_type_script_lang_js_,
13716
- popovervue_type_template_id_64e7122e_render,
13717
- popovervue_type_template_id_64e7122e_staticRenderFns,
13741
+ popovervue_type_template_id_fec53cb4_render,
13742
+ popovervue_type_template_id_fec53cb4_staticRenderFns,
13718
13743
  false,
13719
13744
  null,
13720
13745
  null,
@@ -4280,7 +4280,7 @@ const focusableElementsList = `button,[href],input,select,textarea,details,[tabi
4280
4280
  * will default to the root node of the vue component
4281
4281
  */
4282
4282
  async focusFirstElement(el) {
4283
- const elToFocus = this.getFirstFocusableElement(el);
4283
+ const elToFocus = await this.getFirstFocusableElement(el);
4284
4284
  elToFocus === null || elToFocus === void 0 ? void 0 : elToFocus.focus({
4285
4285
  preventScroll: true
4286
4286
  });
@@ -8000,8 +8000,8 @@ return [_c('ul',{ref:"listWrapper",class:_vm.listClasses,attrs:{"id":_vm.listId,
8000
8000
  var dropdownvue_type_template_id_5944f754_staticRenderFns = []
8001
8001
 
8002
8002
 
8003
- ;// CONCATENATED MODULE: ./node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/popover/popover.vue?vue&type=template&id=64e7122e&
8004
- var popovervue_type_template_id_64e7122e_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.modal && _vm.isOpen)?_c('portal',[_c('div',{staticClass:"d-modal--transparent",attrs:{"aria-hidden":_vm.modal && _vm.isOpen ? 'false' : 'true'},on:{"click":function($event){$event.preventDefault();$event.stopPropagation();}}})]):_vm._e(),_c(_vm.elementType,_vm._g({ref:"popover",tag:"component",class:['d-popover', { 'd-popover__anchor--opened': _vm.isOpen }],attrs:{"data-qa":"dt-popover-container"}},_vm.$listeners),[_c('div',{ref:"anchor",attrs:{"id":!_vm.ariaLabelledby && _vm.labelledBy,"data-qa":"dt-popover-anchor","tabindex":_vm.openOnContext ? 0 : undefined},on:{"!click":function($event){return _vm.defaultToggleOpen.apply(null, arguments)},"contextmenu":_vm.onContext,"keydown":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"up",38,$event.key,["Up","ArrowUp"])){ return null; }$event.preventDefault();return _vm.onArrowKeyPress.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"down",40,$event.key,["Down","ArrowDown"])){ return null; }$event.preventDefault();return _vm.onArrowKeyPress.apply(null, arguments)}],"!keydown":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"escape",undefined,$event.key,undefined)){ return null; }return _vm.closePopover.apply(null, arguments)}}},[_vm._t("anchor",null,{"attrs":{
8003
+ ;// CONCATENATED MODULE: ./node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./components/popover/popover.vue?vue&type=template&id=fec53cb4&
8004
+ var popovervue_type_template_id_fec53cb4_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.modal && _vm.isOpen)?_c('portal',[_c('div',{staticClass:"d-modal--transparent",attrs:{"aria-hidden":_vm.modal && _vm.isOpen ? 'false' : 'true'},on:{"click":function($event){$event.preventDefault();$event.stopPropagation();}}})]):_vm._e(),_c(_vm.elementType,_vm._g({ref:"popover",tag:"component",class:['d-popover', { 'd-popover__anchor--opened': _vm.isOpen }],attrs:{"data-qa":"dt-popover-container"}},_vm.$listeners),[_c('div',{ref:"anchor",attrs:{"id":!_vm.ariaLabelledby && _vm.labelledBy,"data-qa":"dt-popover-anchor","tabindex":_vm.openOnContext ? 0 : undefined},on:{"!click":function($event){return _vm.defaultToggleOpen.apply(null, arguments)},"contextmenu":_vm.onContext,"keydown":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"up",38,$event.key,["Up","ArrowUp"])){ return null; }$event.preventDefault();return _vm.onArrowKeyPress.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"down",40,$event.key,["Down","ArrowDown"])){ return null; }$event.preventDefault();return _vm.onArrowKeyPress.apply(null, arguments)}],"!keydown":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"escape",undefined,$event.key,undefined)){ return null; }return _vm.closePopover.apply(null, arguments)}}},[_vm._t("anchor",null,{"attrs":{
8005
8005
  'aria-expanded': _vm.isOpen.toString(),
8006
8006
  'aria-controls': _vm.id,
8007
8007
  'aria-haspopup': _vm.role,
@@ -8012,7 +8012,7 @@ var popovervue_type_template_id_64e7122e_render = function () {var _vm=this;var
8012
8012
  'd-popover__content',
8013
8013
  _vm.POPOVER_PADDING_CLASSES[_vm.padding],
8014
8014
  _vm.contentClass ],attrs:{"data-qa":"dt-popover-content"}},[_vm._t("content",null,{"close":_vm.closePopover})],2),(_vm.$slots.footerContent)?_c('popover-header-footer',{ref:"popover__footer",class:_vm.POPOVER_HEADER_FOOTER_PADDING_CLASSES[_vm.padding],attrs:{"type":"footer","content-class":_vm.footerClass},scopedSlots:_vm._u([{key:"content",fn:function(){return [_vm._t("footerContent",null,{"close":_vm.closePopover})]},proxy:true}],null,true)}):_vm._e(),(_vm.showVisuallyHiddenClose)?_c('sr-only-close-button',{attrs:{"visually-hidden-close-label":_vm.visuallyHiddenCloseLabel},on:{"close":_vm.closePopover}}):_vm._e()],1)],1)],1)}
8015
- var popovervue_type_template_id_64e7122e_staticRenderFns = []
8015
+ var popovervue_type_template_id_fec53cb4_staticRenderFns = []
8016
8016
 
8017
8017
 
8018
8018
  ;// CONCATENATED MODULE: ./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js
@@ -13423,9 +13423,11 @@ var popover_header_footer_component = normalizeComponent(
13423
13423
  isOpen(isOpen, isPrev) {
13424
13424
  if (isOpen) {
13425
13425
  this.initTippyInstance();
13426
+ this.preventScrolling();
13426
13427
  } else if (!isOpen && isPrev !== isOpen) {
13427
13428
  this.removeEventListeners();
13428
13429
  this.tip.hide();
13430
+ this.enableScrolling();
13429
13431
  }
13430
13432
  }
13431
13433
 
@@ -13526,10 +13528,7 @@ var popover_header_footer_component = normalizeComponent(
13526
13528
  },
13527
13529
 
13528
13530
  addEventListeners() {
13529
- window.addEventListener('dt-popover-close', this.closePopover);
13530
- window.addEventListener('wheel', this.preventScrolling, {
13531
- passive: false
13532
- }); // align popover content width when contentWidth is 'anchor'
13531
+ window.addEventListener('dt-popover-close', this.closePopover); // align popover content width when contentWidth is 'anchor'
13533
13532
 
13534
13533
  if (this.contentWidth === 'anchor') {
13535
13534
  window.addEventListener('resize', this.onResize);
@@ -13538,9 +13537,6 @@ var popover_header_footer_component = normalizeComponent(
13538
13537
 
13539
13538
  removeEventListeners() {
13540
13539
  window.removeEventListener('dt-popover-close', this.closePopover);
13541
- window.removeEventListener('wheel', this.preventScrolling, {
13542
- passive: false
13543
- });
13544
13540
 
13545
13541
  if (this.contentWidth === 'anchor') {
13546
13542
  window.removeEventListener('resize', this.onResize);
@@ -13552,11 +13548,40 @@ var popover_header_footer_component = normalizeComponent(
13552
13548
  },
13553
13549
 
13554
13550
  /*
13555
- * Prevents scrolling only when the popover is set to modal
13551
+ * Prevents scrolling outside of the currently opened modal popover by:
13552
+ * - when anchor is not within another popover: setting the body to overflow: hidden
13553
+ * - when anchor is within another popover: set the popover dialog container to it's non-modal z-index
13554
+ * since it is no longer the active modal. This puts it underneath the overlay and prevents scrolling.
13556
13555
  **/
13557
- preventScrolling(e) {
13558
- if (!this.modal || this.$refs.content.$el.contains(e.target)) return;
13559
- e.preventDefault();
13556
+ async preventScrolling() {
13557
+ await this.$nextTick();
13558
+
13559
+ if (this.modal) {
13560
+ const element = this.anchorEl.closest('body, .tippy-box');
13561
+
13562
+ if (element.tagName.toLowerCase() === 'body') {
13563
+ element.classList.add('d-of-hidden');
13564
+ } else {
13565
+ element.classList.add('d-zi-popover');
13566
+ }
13567
+ }
13568
+ },
13569
+
13570
+ /*
13571
+ * Resets the prevent scrolling properties set in preventScrolling() back to normal.
13572
+ **/
13573
+ async enableScrolling() {
13574
+ await this.$nextTick();
13575
+
13576
+ if (this.modal) {
13577
+ const element = this.anchorEl.closest('body, .tippy-box');
13578
+
13579
+ if (element.tagName.toLowerCase() === 'body') {
13580
+ element.classList.remove('d-of-hidden');
13581
+ } else {
13582
+ element.classList.remove('d-zi-popover');
13583
+ }
13584
+ }
13560
13585
  },
13561
13586
 
13562
13587
  removeReferences() {
@@ -13723,8 +13748,8 @@ var popovervue_type_style_index_0_lang_less_ = __webpack_require__(532);
13723
13748
 
13724
13749
  var popover_component = normalizeComponent(
13725
13750
  popover_popovervue_type_script_lang_js_,
13726
- popovervue_type_template_id_64e7122e_render,
13727
- popovervue_type_template_id_64e7122e_staticRenderFns,
13751
+ popovervue_type_template_id_fec53cb4_render,
13752
+ popovervue_type_template_id_fec53cb4_staticRenderFns,
13728
13753
  false,
13729
13754
  null,
13730
13755
  null,