q2-tecton-elements 1.17.0 → 1.18.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 (138) hide show
  1. package/dist/cjs/{index-afc50fbb.js → index-eccd5617.js} +8 -0
  2. package/dist/cjs/loader.cjs.js +1 -1
  3. package/dist/cjs/q2-badge_2.cjs.entry.js +1 -1
  4. package/dist/cjs/q2-btn_2.cjs.entry.js +3 -2
  5. package/dist/cjs/q2-calendar.cjs.entry.js +1 -1
  6. package/dist/cjs/q2-card.cjs.entry.js +1 -1
  7. package/dist/cjs/q2-carousel-pane.cjs.entry.js +1 -1
  8. package/dist/cjs/q2-carousel.cjs.entry.js +1 -1
  9. package/dist/cjs/q2-chart-donut.cjs.entry.js +1 -1
  10. package/dist/cjs/q2-checkbox-group.cjs.entry.js +1 -1
  11. package/dist/cjs/q2-checkbox.cjs.entry.js +1 -1
  12. package/dist/cjs/q2-dropdown-item.cjs.entry.js +1 -1
  13. package/dist/cjs/q2-dropdown.cjs.entry.js +1 -1
  14. package/dist/cjs/q2-editable-field.cjs.entry.js +1 -1
  15. package/dist/cjs/q2-icon.cjs.entry.js +1 -1
  16. package/dist/cjs/q2-loc.cjs.entry.js +1 -1
  17. package/dist/cjs/q2-message.cjs.entry.js +1 -1
  18. package/dist/cjs/q2-month-picker.cjs.entry.js +147 -0
  19. package/dist/cjs/q2-optgroup.cjs.entry.js +1 -1
  20. package/dist/cjs/{q2-option-list.cjs.entry.js → q2-option-list_2.cjs.entry.js} +102 -19
  21. package/dist/cjs/q2-pagination.cjs.entry.js +8 -2
  22. package/dist/cjs/q2-pill.cjs.entry.js +20 -18
  23. package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
  24. package/dist/cjs/q2-radio.cjs.entry.js +1 -1
  25. package/dist/cjs/q2-section.cjs.entry.js +1 -1
  26. package/dist/cjs/q2-select.cjs.entry.js +3 -5
  27. package/dist/cjs/q2-stepper-pane.cjs.entry.js +1 -1
  28. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +1 -1
  29. package/dist/cjs/q2-stepper.cjs.entry.js +1 -1
  30. package/dist/cjs/q2-tab-container.cjs.entry.js +1 -1
  31. package/dist/cjs/q2-tag.cjs.entry.js +17 -15
  32. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  33. package/dist/cjs/q2-textarea.cjs.entry.js +1 -1
  34. package/dist/cjs/q2-tooltip.cjs.entry.js +63 -13
  35. package/dist/collection/collection-manifest.json +2 -0
  36. package/dist/collection/components/q2-btn/index.js +19 -1
  37. package/dist/collection/components/q2-btn/styles.css +1 -0
  38. package/dist/collection/components/q2-calendar/q2-month-picker.css +130 -0
  39. package/dist/collection/components/q2-calendar/q2-month-picker.js +246 -0
  40. package/dist/collection/components/q2-option-list/index.js +7 -52
  41. package/dist/collection/components/q2-option-list/styles.css +1 -49
  42. package/dist/collection/components/q2-pagination/index.js +9 -3
  43. package/dist/collection/components/q2-pill/index.js +27 -24
  44. package/dist/collection/components/q2-pill/styles.css +11 -6
  45. package/dist/collection/components/q2-popover/index.js +245 -0
  46. package/dist/collection/components/q2-popover/styles.css +205 -0
  47. package/dist/collection/components/q2-select/index.js +2 -4
  48. package/dist/collection/components/q2-tag/index.js +21 -18
  49. package/dist/collection/components/q2-tag/styles.css +1 -5
  50. package/dist/collection/components/q2-tooltip/index.js +102 -13
  51. package/dist/collection/components/q2-tooltip/styles.css +62 -82
  52. package/dist/collection/utils/index.js +7 -0
  53. package/dist/esm/{index-2ca8c93c.js → index-eac6b89e.js} +8 -1
  54. package/dist/esm/loader.js +1 -1
  55. package/dist/esm/q2-badge_2.entry.js +1 -1
  56. package/dist/esm/q2-btn_2.entry.js +3 -2
  57. package/dist/esm/q2-calendar.entry.js +1 -1
  58. package/dist/esm/q2-card.entry.js +1 -1
  59. package/dist/esm/q2-carousel-pane.entry.js +1 -1
  60. package/dist/esm/q2-carousel.entry.js +1 -1
  61. package/dist/esm/q2-chart-donut.entry.js +1 -1
  62. package/dist/esm/q2-checkbox-group.entry.js +1 -1
  63. package/dist/esm/q2-checkbox.entry.js +1 -1
  64. package/dist/esm/q2-dropdown-item.entry.js +1 -1
  65. package/dist/esm/q2-dropdown.entry.js +1 -1
  66. package/dist/esm/q2-editable-field.entry.js +1 -1
  67. package/dist/esm/q2-icon.entry.js +1 -1
  68. package/dist/esm/q2-loc.entry.js +1 -1
  69. package/dist/esm/q2-message.entry.js +1 -1
  70. package/dist/esm/q2-month-picker.entry.js +143 -0
  71. package/dist/esm/q2-optgroup.entry.js +1 -1
  72. package/dist/esm/{q2-option-list.entry.js → q2-option-list_2.entry.js} +102 -20
  73. package/dist/esm/q2-pagination.entry.js +8 -2
  74. package/dist/esm/q2-pill.entry.js +21 -19
  75. package/dist/esm/q2-radio-group.entry.js +1 -1
  76. package/dist/esm/q2-radio.entry.js +1 -1
  77. package/dist/esm/q2-section.entry.js +1 -1
  78. package/dist/esm/q2-select.entry.js +3 -5
  79. package/dist/esm/q2-stepper-pane.entry.js +1 -1
  80. package/dist/esm/q2-stepper-vertical.entry.js +1 -1
  81. package/dist/esm/q2-stepper.entry.js +1 -1
  82. package/dist/esm/q2-tab-container.entry.js +1 -1
  83. package/dist/esm/q2-tag.entry.js +18 -16
  84. package/dist/esm/q2-tecton-elements.js +1 -1
  85. package/dist/esm/q2-textarea.entry.js +1 -1
  86. package/dist/esm/q2-tooltip.entry.js +63 -13
  87. package/dist/q2-tecton-elements/{p-d781e2d9.entry.js → p-02c1b7fd.entry.js} +1 -1
  88. package/dist/q2-tecton-elements/{p-2faed36b.entry.js → p-04c743f2.entry.js} +1 -1
  89. package/dist/q2-tecton-elements/{p-5acb7ec6.entry.js → p-07dc509c.entry.js} +1 -1
  90. package/dist/q2-tecton-elements/{p-d8d9e8eb.entry.js → p-12caa479.entry.js} +1 -1
  91. package/dist/q2-tecton-elements/{p-d3e4cc5d.entry.js → p-160dd1c2.entry.js} +1 -1
  92. package/dist/q2-tecton-elements/{p-31070ab8.entry.js → p-1a3de749.entry.js} +1 -1
  93. package/dist/q2-tecton-elements/{p-0d849ed4.entry.js → p-2061c3fd.entry.js} +1 -1
  94. package/dist/q2-tecton-elements/{p-64605d17.entry.js → p-2e54f9a0.entry.js} +1 -1
  95. package/dist/q2-tecton-elements/{p-a45c6b65.entry.js → p-375569ff.entry.js} +1 -1
  96. package/dist/q2-tecton-elements/p-3766cc6c.entry.js +1 -0
  97. package/dist/q2-tecton-elements/{p-732dafd0.entry.js → p-3eda2714.entry.js} +1 -1
  98. package/dist/q2-tecton-elements/{p-cde0cdff.entry.js → p-421af42d.entry.js} +1 -1
  99. package/dist/q2-tecton-elements/{p-44bdaf52.entry.js → p-4fd405f5.entry.js} +1 -1
  100. package/dist/q2-tecton-elements/p-509c8924.entry.js +1 -0
  101. package/dist/q2-tecton-elements/{p-445e7c45.entry.js → p-55dc3dc1.entry.js} +1 -1
  102. package/dist/q2-tecton-elements/p-5fffb28a.entry.js +1 -0
  103. package/dist/q2-tecton-elements/p-612e9974.entry.js +1 -0
  104. package/dist/q2-tecton-elements/{p-815c8a7d.entry.js → p-796c2bb5.entry.js} +1 -1
  105. package/dist/q2-tecton-elements/{p-41fcf343.js → p-80014da0.js} +1 -1
  106. package/dist/q2-tecton-elements/{p-8543a0e1.entry.js → p-86887866.entry.js} +1 -1
  107. package/dist/q2-tecton-elements/p-9204c34d.entry.js +1 -0
  108. package/dist/q2-tecton-elements/{p-b4b8f85c.entry.js → p-a0fa416d.entry.js} +1 -1
  109. package/dist/q2-tecton-elements/p-bd83e8e2.entry.js +1 -0
  110. package/dist/q2-tecton-elements/{p-fbf23146.entry.js → p-be0f2539.entry.js} +1 -1
  111. package/dist/q2-tecton-elements/p-c05b0b55.entry.js +1 -0
  112. package/dist/q2-tecton-elements/{p-318758d4.entry.js → p-c608e3c9.entry.js} +1 -1
  113. package/dist/q2-tecton-elements/{p-824a1d7c.entry.js → p-d826d7ad.entry.js} +1 -1
  114. package/dist/q2-tecton-elements/{p-06865cf5.entry.js → p-d9e9340c.entry.js} +1 -1
  115. package/dist/q2-tecton-elements/{p-4da9b6b6.entry.js → p-e5757895.entry.js} +1 -1
  116. package/dist/q2-tecton-elements/p-e68c9ef0.entry.js +1 -0
  117. package/dist/q2-tecton-elements/{p-30f81b22.entry.js → p-eb33bda4.entry.js} +1 -1
  118. package/dist/q2-tecton-elements/{p-661c2092.entry.js → p-f319549d.entry.js} +1 -1
  119. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  120. package/dist/types/components/q2-btn/index.d.ts +1 -0
  121. package/dist/types/components/q2-calendar/q2-month-picker.d.ts +24 -0
  122. package/dist/types/components/q2-option-list/index.d.ts +1 -4
  123. package/dist/types/components/q2-pill/index.d.ts +7 -3
  124. package/dist/types/components/q2-popover/index.d.ts +26 -0
  125. package/dist/types/components/q2-tag/index.d.ts +5 -2
  126. package/dist/types/components/q2-tooltip/index.d.ts +12 -0
  127. package/dist/types/components.d.ts +53 -4
  128. package/dist/types/utils/index.d.ts +1 -0
  129. package/package.json +2 -2
  130. package/dist/q2-tecton-elements/p-30a4fdfb.entry.js +0 -1
  131. package/dist/q2-tecton-elements/p-41c22a16.entry.js +0 -1
  132. package/dist/q2-tecton-elements/p-654fcd6b.entry.js +0 -1
  133. package/dist/q2-tecton-elements/p-916fd90b.entry.js +0 -1
  134. package/dist/q2-tecton-elements/p-94b3c534.entry.js +0 -1
  135. package/dist/q2-tecton-elements/p-a659d112.entry.js +0 -1
  136. package/dist/q2-tecton-elements/p-b595b415.entry.js +0 -1
  137. package/dist/test/elements/q2-tag-test.js +0 -151
  138. package/dist/types/workspace/workspace/Tecton_tecton-production_master/packages/q2-tecton-elements/.stencil/test/elements/q2-tag-test.d.ts +0 -1
@@ -1 +0,0 @@
1
- import{r as t,c as e,h as s,g as i}from"./p-c5691700.js";import{c as o,s as l,h as n,o as a,l as h,b as r,i as c,r as d}from"./p-41fcf343.js";const p=class{constructor(s){t(this,s),this.change=e(this,"change",7),this.input=e(this,"input",7),this.selectedOptions=[],this.disabled=!1,this.readonly=!1,this.multiple=!1,this.minRows=3,this.searchable=!1,this.multilineOptions=!1,this.optional=!1,this.dropdownOpen=!1,this.onlyShowingSelected=!1,this.searchText="",this.hasCustomDisplay=!1,this.inputFocused=!1,this.prioritizeSearch=!1,this.scheduledAfterRender=[],this.keyStore={queue:[],lastPressedAt:new Date},this.guid=o(),this.onMutationObserved=()=>{const t=this.hostElement.querySelector(".custom-display-content"),e=this.hostElement.shadowRoot.querySelector('slot[name="q2-select-display"]'),s=e?e.assignedNodes().length>0:t.children.length>0;if(this.hasCustomDisplay!==s&&(this.hasCustomDisplay=s),this.multiple)return void this.updateMultipleOptionAttrs();this.updateSingleOptionAttrs();const i=this.optionElements[this.activeIndex];i&&i.id===this.activeOptionId||(this.activeIndex=this.getDefaultActiveIndex(),this.setActiveOption())},this.searchAndFocus=t=>{(()=>{const e=new Date;e.getTime()-this.keyStore.lastPressedAt.getTime()>1e3&&(this.keyStore.queue=[]),1===this.keyStore.queue.length&&this.keyStore.queue[0]===t||this.keyStore.queue.push(t),this.keyStore.lastPressedAt=e})();const e=(t=>t.find((t=>!t.element.disabled&&t.element.display&&t.element.display.replace(/\s/g,"").match(new RegExp(`^${this.keyStore.queue.join("")}`,"i")))))((()=>{this.pivotIndex=void 0===this.pivotIndex?0:(this.activeIndex||0)+1;const t=this.optionElements.map(((t,e)=>({element:t,index:e})));return[...t.slice(this.pivotIndex),...t.slice(0,this.pivotIndex)]})());e&&(({element:t,index:e})=>{this.dropdownOpen||this.multiple?this.openDropdownWithActiveElement(e):(this.activeIndex=e,this.change.emit({value:t.value}))})(e)},this.dropdownFocusoutHandler=t=>{const{relatedTarget:e}=t,s=this.dropdownContainer.contains(e),i=!s&&this.hostElement.contains(e);s||i||this.dropdownOpen&&this.closeDropdown()},this.dropdownKeydownHandler=t=>{t.stopPropagation();const{activeIndex:e,searchable:s,optionElements:i,multiSelectHeader:o}=this,{key:l,shiftKey:n}=t;if(!(this.readonly||o&&o.contains(t.target)&&[" ","Enter"].includes(l)))switch(l){case" ":case"Enter":t.preventDefault();const o=this.hostElement.querySelector(`[option-id="${this.activeOptionId}"]`);if(!o||o.disabled)break;this.selectOption(o,!0);break;case"ArrowUp":if(t.preventDefault(),0===e)break;if(void 0!==e){const t=this.getNextVisibleIndex(-1);if(-1===t)break;this.adjustActiveOptionAndScroll(t-e)}else this.setDefaultActiveElement();break;case"ArrowDown":if(t.preventDefault(),e===i.length-1)break;if(void 0!==e){const t=this.getNextVisibleIndex(1);if(-1===t)break;this.adjustActiveOptionAndScroll(t-e)}else this.setDefaultActiveElement();break;case"Home":t.preventDefault(),this.openDropdownWithActiveElement(0);break;case"End":t.preventDefault(),this.openDropdownWithActiveElement(i.length-1);break;case"PageUp":t.preventDefault(),this.openDropdownWithActiveElement(Math.max(e-10,0));break;case"PageDown":t.preventDefault(),this.openDropdownWithActiveElement(Math.min(e+10,i.length-1));break;case"Tab":if(n)break;const a=this.hostElement.querySelector(`[option-id="${this.activeOptionId}"]`);if(!a||a.disabled)return;if(a.selected)return;this.selectOption(a);break;case"Esc":case"Escape":this.closeDropdown(),this.focusInput();break;default:if(s)break;if(!l.match(/^[A-Za-z0-9]$/))break;this.searchAndFocus(l)}},this.inputKeydownHandler=t=>{t.stopPropagation();const{key:e,shiftKey:s}=t,{optionElements:i,searchable:o}=this;switch(e){case"ArrowDown":t.preventDefault(),this.openDropdownWithActiveElement(this.getDefaultActiveIndex());break;case"ArrowUp":t.preventDefault(),this.openDropdownWithActiveElement(this.getLastEnabledIndex()),this.setFocusedOption();break;case"Home":t.preventDefault(),this.openDropdownWithActiveElement(0);break;case"End":t.preventDefault(),this.openDropdownWithActiveElement(i.length-1);break;case"Escape":case"Esc":case"Tab":this.closeDropdown();break;default:if(s)break;if(o){this.openDropdownWithoutActiveElement();break}if(!e.match(/^[A-Za-z0-9]$/))break;this.searchAndFocus(e)}},this.inputClickHandler=t=>{t.stopPropagation(),l(this),this.toggleDropdown(),this.focusInput()},this.inputInputHandler=t=>{t.stopPropagation();const e=t.detail.value;!!this.value&&this.inputField.value!==e&&this.selectOption(null),this.dropdownOpen||this.openDropdownWithoutActiveElement(),this.prioritizeSearch=!0,this.searchText=e,this.input.emit({query:e})},this.inputFocusHandler=()=>{this.inputFocused=!0},this.inputBlurHandler=()=>{this.inputFocused=!1},this.inputChangeHandler=t=>{t.stopPropagation()},this.clickedElsewhere=t=>{"click-elsewhere"===t.target.localName&&(t.stopPropagation(),this.dropdownOpen&&this.closeDropdown())},this.onCustomDisplayClick=t=>{t.stopPropagation(),this.focusInput(),this.toggleDropdown()},this.showSelectedOptions=t=>{t.stopImmediatePropagation(),this.onlyShowingSelected=!0,this.optionElements.forEach((t=>{t._multiSelectHidden=!t.selected}))},this.showAllOptions=t=>{t.stopPropagation(),this.onlyShowingSelected=!1,this.optionElements.forEach((t=>{t._multiSelectHidden=!1}))}}componentWillLoad(){n(this)}componentDidLoad(){const t=new MutationObserver(this.onMutationObserved);t.observe(this.hostElement,{childList:!0,subtree:!0}),this.mutationObserver=t,this.onMutationObserved(),a(this.hostElement),setTimeout((()=>this.checkSelectedDisplay()),0)}componentDidRender(){setTimeout((()=>{this.scheduledAfterRender.forEach((t=>t())),this.scheduledAfterRender=[]}),25)}disconnectedCallback(){var t;null===(t=this.mutationObserver)||void 0===t||t.disconnect(),this.mutationObserver=null}get isComponentFocused(){return document.activeElement===this.hostElement||!!this.hostElement.querySelector(":focus")}get isSearchMode(){return this.searchable&&this.inputFocused||this.searchText}get badgeValue(){if(!this.multiple)return;const t=this.selectedOptions.length;return this.dropdownOpen&&this.searchable?t||null:t>1?"+"+(t-1):null}get minPopHeight(){const{minRows:t}=this,e=this.hostElement.querySelector("q2-option:not([hidden])"),s=e?window.getComputedStyle(e).minHeight:"44px";return t*parseInt(s)}get selectedDisplay(){return this.prioritizeSearch||this.searchText?this.searchText:this.hasCustomDisplay?"":this.multiple?this.calculateMultiSelectSelectedDisplay():this.calculateSingleSelectSelectedDisplay()}get selectedDisplaySlot(){return this.hostElement.querySelector('[slot="_selected-display"]')}get firstSelectedValue(){var t,e;return this.multiple?null!==(e=null===(t=this.selectedOptions)||void 0===t?void 0:t[0])&&void 0!==e?e:null:this.value}get firstSelectedOptionElement(){const{firstSelectedValue:t}=this;return t?this.optionElements.find((({value:e})=>e===t)):null}get optionElements(){return Array.from(this.hostElement.querySelectorAll("q2-option"))}get visibleOptionElements(){return Array.from(this.hostElement.querySelectorAll("q2-option:not([_multiselecthidden])"))}get wrapperClasses(){const{errors:t}=this,e=["q2-select-container"];return this.dropdownOpen&&e.push("dropdown-open"),Array.isArray(t)&&t.length>0&&e.push("has-error"),this.inputFocused&&e.push("is-focused"),this.searchable&&e.push("is-searchable"),e.join(" ")}ariaLabelObserver(){n(this)}valueUpdated(){this.multiple||this.updateSingleOptionAttrs()}selectedOptionsUpdated(){this.multiple&&this.updateMultipleOptionAttrs()}multilineOptionsChanged(t,e){t!==e&&this.optionElements.forEach((e=>e.multiline=t))}dropdownOpenChanged(t){this.scheduledAfterRender.push((()=>{const{multiple:e,multiSelectHeader:s,dropdownContainer:i}=this,o=t&&e&&(null==s?void 0:s.offsetHeight)||0;o?i.style.setProperty("--comp-multi-select-header-height",`${o}px`):i.style.removeProperty("--comp-multi-select-header-height")}))}keydownHandler(t){this.inputKeydownHandler(t)}onHostElementChange(t){this.readonly||t.target!==this.hostElement||this.hostElement.onchange||(this.multiple?this.selectedOptions=t.detail.selectedOptions:this.value=t.detail.value)}onHostElementInput(t){if(!this.searchable||t.target!==this.hostElement||this.hostElement.oninput)return;const e=this.optionElements,s=this.searchText.trim().toLocaleLowerCase();let i=0;e.forEach((t=>{var e;if(""===s)return void(t.hidden=!1);const o="Q2-CARD"===(null===(e=t.firstElementChild)||void 0===e?void 0:e.tagName)?t.firstElementChild.title:null,{display:l="",innerText:n=""}=t,a=[l,o,n].some((t=>{var e;return null!==(e=null==t?void 0:t.toLocaleLowerCase().includes(s))&&void 0!==e&&e}));t.hidden=!a,a&&i++})),this.setStatusMessage(h(s?"tecton.element.select.searchable.results":"tecton.element.select.allOptions",[s?i:e.length]))}delegateFocus(t){const e=r(t,this.hostElement);(this.prioritizeSearch=e&&this.searchable)?this.clearSelectedDisplay():c(t,this.hostElement)&&this.inputField.shadowRoot.querySelector(".input-field").focus()}handleFocusout(t){this.prioritizeSearch=!r(t,this.hostElement)&&this.searchable}clickHandler(t){const e=t.target.closest("q2-option");!e||e.hasAttribute("disabled")&&"false"!==e.getAttribute("disabled")||this.selectOption(e,!0)}getDefaultActiveIndex(){const t=this.optionElements.findIndex((t=>t.selected&&!t.hidden));if(t>-1)return t;const e=this.optionElements.findIndex((t=>!t.hidden));return e>-1?e:0}getLastEnabledIndex(){const t=this.optionElements.reduce(((t,e,s)=>(e.hidden||e.disabled||t.push(s),t)),[]);return t[t.length-1]}setActiveOption(){if(!this.dropdownOpen)return;const t=this.activeIndex;this.optionElements.forEach(((e,s)=>{t===s?(e.active=!0,this.activeOptionId=e.optionId):e.active=!1}))}setFocusedOption(){const t=this.optionElements[this.activeIndex];t&&(t.dispatchEvent(new FocusEvent("focus")),t.focus())}calculateMultiSelectSelectedDisplay(){var t;const{firstSelectedOptionElement:e,firstSelectedValue:s,multilineOptions:i}=this;return s?(null==e?void 0:e.display)?h(e.display):i&&this.searchable?this.searchText:i?"":null!==(t=null==e?void 0:e.value)&&void 0!==t?t:s:""}calculateSingleSelectSelectedDisplay(){const{firstSelectedOptionElement:t}=this;return(null==t?void 0:t.display)&&h(t.display)||this.value||""}updateSingleOptionAttrs(){const{value:t,guid:e,multilineOptions:s}=this;this.optionElements.forEach(((i,o)=>{i.selected=i.value===t,i.optionId=`q2-select-${e}-option-${o}`,i.multiline=s}))}updateMultipleOptionAttrs(){0===this.selectedOptions.length&&(this.onlyShowingSelected=!1);const{selectedOptions:t,onlyShowingSelected:e,guid:s,multilineOptions:i}=this;this.optionElements.forEach(((o,l)=>{o.selected=t.includes(o.value),o._multiSelectHidden=!!e&&!o.selected,o.optionId=`q2-select-${s}-option-${l}`,o.multiline=i}))}focusSelectedSibling(t){if(!this.onlyShowingSelected)return;const{visibleOptionElements:e}=this;if(e.length<2)return;const s=e.indexOf(t),i=this.optionElements.indexOf(e[s?s-1:s+1]);this.activeIndex=i,this.setFocusedOption()}selectOption(t,e=!1){var s;const i=null!==(s=null==t?void 0:t.value)&&void 0!==s?s:"";this.multiple?this.selectedOptions.includes(i)?(this.focusSelectedSibling(t),this.change.emit({selectedOptions:this.selectedOptions.filter((t=>t!==i))})):i&&this.change.emit({selectedOptions:[...this.selectedOptions,i]}):(this.change.emit({value:i}),this.closeDropdown(),e&&this.focusInput())}scrollToActiveOption(){const t=this.optionElements[this.activeIndex];null==t||t.scrollIntoView({block:"nearest"})}openDropdownWithoutActiveElement(){this.readonly||(this.activeIndex=void 0,this.setActiveOption(),this.dropdownOpen=!0,this.scheduledAfterRender.push(d))}openDropdownWithActiveElement(t){this.readonly||(this.activeIndex=t,this.dropdownOpen=!0,this.setActiveOption(),this.scheduledAfterRender.push((()=>{this.setFocusedOption(),this.scrollToActiveOption(),d()})))}closeDropdown(){this.dropdownOpen=!1,this.searchText&&(this.searchText="",this.input.emit({query:""})),this.scheduledAfterRender.push(d)}toggleDropdown(){this.disabled||(this.dropdownOpen&&!this.searchText?this.closeDropdown():this.openDropdownWithoutActiveElement())}adjustActiveOptionAndScroll(t){this.activeIndex+=t,this.setActiveOption(),this.setFocusedOption(),this.scrollToActiveOption()}setDefaultActiveElement(){this.activeIndex=this.getDefaultActiveIndex(),this.setActiveOption(),this.setFocusedOption()}focusInput(){var t;null===(t=this.inputField)||void 0===t||t.dispatchEvent(new FocusEvent("focus"))}getNextVisibleIndex(t){let e=this.activeIndex+t;const{optionElements:s}=this;for(;e>=0&&e<=s.length-1;){const{display:i,visibility:o}=window.getComputedStyle(s[e]);if("none"!==i&&"hidden"!==o)return e;e+=t}return-1}setStatusMessage(t){clearTimeout(this.statusMessageTimer),this.statusMessage="",this.statusMessageTimer=setTimeout((()=>{this.statusMessage=t}),1e3)}clearSelectedDisplay(){var t;null===(t=this.selectedDisplaySlot)||void 0===t||t.remove()}checkSelectedDisplay(){let t=this.selectedDisplaySlot;const{value:e,multiple:s,selectedOptions:i,multilineOptions:o,firstSelectedOptionElement:l,prioritizeSearch:n}=this;if(n||!o||!e&&s&&!i.length)return this.clearSelectedDisplay();if(!l||l.display)return this.clearSelectedDisplay();const a=l.firstElementChild.cloneNode(!0);return a.querySelectorAll("[hide-on-select]").forEach((t=>t.remove())),t?(t.style.setProperty("--comp-selected-display-height",0===t.clientHeight?"auto":`${t.clientHeight}px`),t.firstElementChild.outerHTML!==a.outerHTML&&t.replaceChild(a,t.firstElementChild)):(t=document.createElement("div"),t.slot="_selected-display",t.appendChild(a),this.hostElement.appendChild(t)),t}checkSelectedDisplayHeight(){const{selectedDisplaySlot:t}=this;t&&t.style.setProperty("--comp-selected-display-height","44px")}renderCustomDisplay(){if(this.checkSelectedDisplay())return this.checkSelectedDisplayHeight(),s("slot",{name:"_selected-display",slot:"custom-display"})}render(){const t=!this.searchable;return s("click-elsewhere",{class:this.wrapperClasses,onChange:this.clickedElsewhere},s("div",{"aria-live":"polite","aria-atomic":"true",role:"status",class:"sr"},this.statusMessage),s("q2-input",{ref:t=>this.inputField=t,class:"q2-select-input",label:this.label&&h(this.label)||"",value:this.selectedDisplay,errors:Array.isArray(this.errors)&&this.errors.length>0&&this.errors.map((t=>h(t)))||this.invalid&&["tecton.element.select.invalid"]||[],disabled:this.disabled,optional:this.optional,readonly:this.readonly,hideLabel:this.hideLabel,ariaExpanded:`${!!this.dropdownOpen}`,ariaOwns:"dropdown",ariaHaspopup:"listbox",role:this.searchable?"combobox":null,pseudo:t,"test-id":"toggleDropdown","hide-messages":!0,iconRight:"chevron-down",onClick:this.inputClickHandler,onInput:this.inputInputHandler,onKeyDown:this.inputKeydownHandler,onFocus:this.inputFocusHandler,onBlur:this.inputBlurHandler,onChange:this.inputChangeHandler,badgeValue:this.badgeValue,badgeTheme:this.isComponentFocused?"primary":void 0},this.renderCustomDisplay()),s("div",{class:"custom-display-content",hidden:!this.hasCustomDisplay||!!this.searchText,onClick:this.onCustomDisplayClick},s("slot",{name:"q2-select-display"})),this.optionsDropdown())}optionsDropdown(){return s("div",{class:"q2-select-dropdown q2-element-dropdown "+("up"===this.privatePopDirection?"dropup":""),ref:t=>this.dropdownContainer=t,onKeyDown:this.dropdownKeydownHandler,onFocusout:this.dropdownFocusoutHandler},this.multiple?this.visibilityToggle():"",s("div",{class:"q2-select-options",id:"dropdown",role:"listbox"},s("slot",null)))}visibilityToggle(){const t=this.selectedOptions.length;return s("div",{class:"multi-select-header",ref:t=>this.multiSelectHeader=t},h("tecton.element.select.multiHeader.showing"),s("q2-btn",{class:"show-all-options"+(this.onlyShowingSelected?"":" selected"),badge:!0,"aria-selected":!this.onlyShowingSelected||void 0,"test-id":"allOptionsButton",onClick:this.showAllOptions,label:h("tecton.element.select.multiHeader.allAriaLabel"),"hide-label":!0},h("tecton.element.select.multiHeader.all")),s("q2-btn",{class:"show-selected-options"+(this.onlyShowingSelected?" selected":""),"aria-selected":this.onlyShowingSelected||void 0,disabled:0===this.selectedOptions.length,badge:!0,"test-id":"selectedOptionsButton",onClick:this.showSelectedOptions,label:h("tecton.element.select.multiHeader.selectedAriaLabel",[t]),"hide-label":!0},h("tecton.element.select.multiHeader.selected",[t])))}get hostElement(){return i(this)}static get watchers(){return{ariaLabel:["ariaLabelObserver"],value:["valueUpdated"],selectedOptions:["selectedOptionsUpdated"],multilineOptions:["multilineOptionsChanged"],dropdownOpen:["dropdownOpenChanged"]}}};p.style="*{box-sizing:border-box}*:active{outline:none}*:focus{outline:none;box-shadow:var(--const-global-focus, 0 0 0 2px #33b4ff)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}.q2-element-dropdown{display:none;position:absolute;background-color:var(--app-white, #ffffff);color:var(--t-text, #4d4d4d);left:0;width:100%;z-index:100;margin-top:1px;box-shadow:var(--app-shadow-1, 0 2px 4px rgba(0, 0, 0, 0.3));height:0;overflow:hidden;opacity:0;visibility:hidden;transition:opacity var(--app-tween-1, 0.2s ease);border-radius:var(--tct-dropdown-border-radius, --t-dropdown-border-radius, 0);--comp-scrollbar-size:var(--tct-scrollbar-size, var(--t-scrollbar-size, var(--app-scale-1x, 5px)));--comp-scrollbar-border-radius:var(--tct-scrollbar-border-radius, var(--t-scrollbar-border-radius, var(--app-border-radius-1, 3px)));--comp-scrollbar-color:var(--tct-scrollbar-color, var(--t-scrollbar-color, var(--t-a11y-gray-color, #747474)));scrollbar-width:thin;scrollbar-color:var(--comp-scrollbar-color) transparent}.q2-element-dropdown::-webkit-scrollbar{width:var(--comp-scrollbar-size);height:var(--comp-scrollbar-size);margin:5px}.q2-element-dropdown::-webkit-scrollbar-thumb{background:var(--comp-scrollbar-color);border-radius:var(--comp-scrollbar-border-radius)}.q2-element-dropdown::-webkit-scrollbar-track{background:transparent;border-radius:var(--comp-scrollbar-border-radius)}.q2-element-dropdown.sizable{display:block;height:auto}.dropdown-open .q2-element-dropdown{display:block;height:auto;overflow:auto;opacity:1;visibility:visible}:host([alignment=right]) .q2-element-dropdown{left:auto;right:0}:host([block]) q2-btn,:host([block]){display:block}:host{display:block;margin-top:var(--tct-select-margin-top, var(--app-scale-4, 30px));margin-bottom:var(--tct-select-margin-bottom, var(--app-scale-4, 30px))}.q2-select-container{position:relative;display:block}.q2-select-input{margin:0;--tct-input-min-height:var(--tct-select-input-min-height, var(--t-select-input-min-height));--tct-input-max-height:var(--tct-select-input-max-height, var(--t-select-input-max-height, 100px))}::slotted([slot=_selected-display]){width:100%;min-height:var(--comp-selected-display-height, 44px)}.custom-display-content{position:absolute;bottom:0;left:calc(var(--tct-scale-2, var(--app-scale-2x, 10px)) + 1px);height:44px;width:calc(100% - 34px - var(--tct-scale-3, var(--app-scale-3x, 15px)));overflow:hidden;cursor:pointer;transition:left var(--tct-tween-2, var(--app-tween-1, 0.2s ease))}.custom-display-content:not([hidden]){display:flex;align-items:center}.is-searchable.is-focused .custom-display-content,.is-searchable .custom-display-content:active{left:calc(var(--tct-scale-3, var(--app-scale-3x, 15px)) + 1px)}.has-error .custom-display-content{width:calc(100% - 68px - var(--tct-scale-3, var(--app-scale-3x, 15px)))}.dropdown-open .q2-select-dropdown{overflow-y:auto;max-height:300px}.multi-select-header{padding:var(--tct-scale-1, var(--app-scale-1x, 5px)) var(--tct-scale-2, var(--app-scale-2x, 10px));position:sticky;top:0;z-index:5;background:var(--app-white)}.show-all-options{margin-right:var(--tct-scale-1, var(--app-scale-1x, 5px));margin-left:var(--tct-scale-2, var(--app-scale-2x, 10px))}.q2-element-dropdown.dropup{bottom:var(--comp-dropup-offset)}";export{p as q2_select}
@@ -1,151 +0,0 @@
1
- import { setup, getFocusedAttribute } from '../helpers';
2
- describe('q2-tag', () => {
3
- let page;
4
- let tag;
5
- let optionList;
6
- let controlBtn;
7
- let allOptions;
8
- let optionContainer;
9
- let clickSpy;
10
- let changeSpy;
11
- const getFocusedValue = async (page) => {
12
- return page.$eval('body', () => document.activeElement.getAttribute('value'));
13
- };
14
- it('does not render button or dropdown by default', async () => {
15
- page = await setup({
16
- html: `<q2-tag label="My tag"></q2-tag>`,
17
- });
18
- optionList = await page.find('q2-tag >>> q2-option-list');
19
- controlBtn = await page.find('q2-tag >>> button');
20
- expect(controlBtn).toBeNull();
21
- expect(optionList).toBeNull();
22
- });
23
- describe('when options are provided', () => {
24
- beforeEach(async () => {
25
- page = await setup({
26
- html: `
27
- <q2-tag label="My tag">
28
- <q2-option value="1">Option 1</q2-option>
29
- <q2-option value="2">Option 2</q2-option>
30
- <q2-option value="3">Option 3</q2-option>
31
- </q2-tag>
32
- `,
33
- });
34
- tag = await page.find('q2-tag');
35
- allOptions = await page.findAll('q2-option');
36
- optionList = await page.find('q2-tag >>> q2-option-list');
37
- optionContainer = await page.find('q2-tag >>> q2-option-list >>> .options');
38
- controlBtn = await page.find('q2-tag >>> button');
39
- clickSpy = await tag.spyOnEvent('click');
40
- changeSpy = await tag.spyOnEvent('change');
41
- });
42
- it('can select option via keyboard', async () => {
43
- const tagWrapper = await page.find('q2-tag >>> .tag-wrapper');
44
- expect(tagWrapper.classList.contains('has-options')).toBe(true);
45
- expect(optionList).not.toHaveAttribute('open');
46
- await controlBtn.press('ArrowDown');
47
- await page.waitForChanges();
48
- expect(tag).toHaveAttribute('open');
49
- expect(optionList).toHaveAttribute('open');
50
- expect(await getFocusedValue(page)).toEqual('1');
51
- await optionContainer.press('ArrowDown');
52
- await page.waitForChanges();
53
- expect(await getFocusedValue(page)).toEqual('2');
54
- await allOptions[1].press(' ');
55
- await page.waitForChanges();
56
- expect(tag).not.toHaveAttribute('open');
57
- expect(optionList).not.toHaveAttribute('open');
58
- expect(clickSpy).toHaveReceivedEventDetail({
59
- value: '2',
60
- });
61
- expect(changeSpy).not.toHaveReceivedEvent();
62
- });
63
- it('can select option via mouse', async () => {
64
- const tagWrapper = await page.find('q2-tag >>> .tag-wrapper');
65
- expect(tagWrapper.classList.contains('has-options')).toBe(true);
66
- expect(optionList).not.toHaveAttribute('open');
67
- await controlBtn.click();
68
- await page.waitForChanges();
69
- expect(tag).toHaveAttribute('open');
70
- expect(optionList).toHaveAttribute('open');
71
- await allOptions[1].click();
72
- await page.waitForChanges();
73
- expect(tag).not.toHaveAttribute('open');
74
- expect(optionList).not.toHaveAttribute('open');
75
- expect(clickSpy).toHaveReceivedEventDetail({
76
- value: '2',
77
- });
78
- expect(changeSpy).not.toHaveReceivedEvent();
79
- });
80
- describe('when keyboard is pressed', () => {
81
- it('opens list and focuses first option on ArrowDown', async () => {
82
- await controlBtn.press('ArrowDown');
83
- await page.waitForChanges();
84
- expect(tag).toHaveAttribute('open');
85
- expect(optionList).toHaveAttribute('open');
86
- expect(await getFocusedAttribute(page, 'value')).toEqual('1');
87
- });
88
- it('opens list and focuses first option on ArrowUp', async () => {
89
- await controlBtn.press('ArrowUp');
90
- await page.waitForChanges();
91
- expect(tag).toHaveAttribute('open');
92
- expect(optionList).toHaveAttribute('open');
93
- expect(await getFocusedAttribute(page, 'value')).toEqual('1');
94
- });
95
- it('opens list and focuses first option on Enter', async () => {
96
- await controlBtn.press('Enter');
97
- await page.waitForChanges();
98
- expect(tag).toHaveAttribute('open');
99
- expect(optionList).toHaveAttribute('open');
100
- expect(await getFocusedAttribute(page, 'value')).toEqual('1');
101
- });
102
- it('opens list and focuses first option on Space', async () => {
103
- await controlBtn.press(' ');
104
- await page.waitForChanges();
105
- expect(tag).toHaveAttribute('open');
106
- expect(optionList).toHaveAttribute('open');
107
- expect(await getFocusedValue(page)).toEqual('1');
108
- });
109
- it('opens list and focuses last option on Home', async () => {
110
- await controlBtn.press('Home');
111
- await page.waitForChanges();
112
- expect(tag).toHaveAttribute('open');
113
- expect(optionList).toHaveAttribute('open');
114
- expect(await getFocusedAttribute(page, 'value')).toEqual('1');
115
- });
116
- it('opens list and focuses last option on End', async () => {
117
- await controlBtn.press('End');
118
- await page.waitForChanges();
119
- expect(tag).toHaveAttribute('open');
120
- expect(optionList).toHaveAttribute('open');
121
- expect(await getFocusedAttribute(page, 'value')).toEqual('3');
122
- });
123
- });
124
- });
125
- describe('focus', () => {
126
- let page;
127
- let tag;
128
- beforeEach(async () => {
129
- page = await setup({
130
- html: `
131
- <q2-tag label="My tag">
132
- <q2-option value="1">Option 1</q2-option>
133
- <q2-option value="2">Option 2</q2-option>
134
- <q2-option value="3">Option 3</q2-option>
135
- </q2-tag>
136
- `,
137
- });
138
- tag = await page.find('q2-tag');
139
- });
140
- it('focuses active option and opens the list when focus event is dispatched', async function () {
141
- await tag.triggerEvent('focus');
142
- await page.waitForChanges();
143
- expect(await getFocusedAttribute(page, 'test-id')).toEqual('btn-control');
144
- });
145
- it('focuses active option and opens the list when element.focus() is called', async function () {
146
- await tag.focus();
147
- await page.waitForChanges();
148
- expect(await getFocusedAttribute(page, 'test-id')).toEqual('btn-control');
149
- });
150
- });
151
- });