q2-tecton-elements 1.53.0 → 1.53.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.
Files changed (442) hide show
  1. package/dist/cjs/click-elsewhere_2.cjs.entry.js +64 -61
  2. package/dist/cjs/click-elsewhere_2.cjs.entry.js.map +1 -1
  3. package/dist/cjs/{index-07285783.js → index-76f63767.js} +1 -21
  4. package/dist/cjs/index-76f63767.js.map +1 -0
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/q2-action-group.cjs.entry.js +2 -2
  7. package/dist/cjs/q2-action-sheet.cjs.entry.js +2 -2
  8. package/dist/cjs/q2-avatar.cjs.entry.js +1 -1
  9. package/dist/cjs/q2-badge_7.cjs.entry.js +12 -4
  10. package/dist/cjs/q2-badge_7.cjs.entry.js.map +1 -1
  11. package/dist/cjs/q2-calendar.cjs.entry.js +1 -1
  12. package/dist/cjs/q2-card.cjs.entry.js +1 -1
  13. package/dist/cjs/q2-carousel-pane.cjs.entry.js +3 -3
  14. package/dist/cjs/q2-carousel.cjs.entry.js +1 -1
  15. package/dist/cjs/q2-chart-area.cjs.entry.js +2 -2
  16. package/dist/cjs/q2-chart-bar.cjs.entry.js +2 -2
  17. package/dist/cjs/q2-chart-donut.cjs.entry.js +2 -2
  18. package/dist/cjs/q2-checkbox-group.cjs.entry.js +1 -1
  19. package/dist/cjs/q2-checkbox.cjs.entry.js +1 -1
  20. package/dist/cjs/q2-currency.cjs.entry.js +1 -1
  21. package/dist/cjs/q2-data-table.cjs.entry.js +1 -1
  22. package/dist/cjs/q2-detail.cjs.entry.js +2 -2
  23. package/dist/cjs/q2-dropdown-item.cjs.entry.js +1 -1
  24. package/dist/cjs/q2-dropdown.cjs.entry.js +10 -12
  25. package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
  26. package/dist/cjs/q2-editable-field.cjs.entry.js +7 -8
  27. package/dist/cjs/q2-editable-field.cjs.entry.js.map +1 -1
  28. package/dist/cjs/q2-example.cjs.entry.js +1 -1
  29. package/dist/cjs/q2-file-picker.cjs.entry.js +1 -1
  30. package/dist/cjs/q2-formatted-text.cjs.entry.js +1 -1
  31. package/dist/cjs/q2-item_3.cjs.entry.js +3 -3
  32. package/dist/cjs/q2-legend.cjs.entry.js +1 -1
  33. package/dist/cjs/q2-loc.cjs.entry.js +2 -2
  34. package/dist/cjs/q2-message.cjs.entry.js +2 -2
  35. package/dist/cjs/q2-month-picker.cjs.entry.js +3 -3
  36. package/dist/cjs/q2-optgroup.cjs.entry.js +2 -2
  37. package/dist/cjs/q2-option-list.cjs.entry.js +1 -1
  38. package/dist/cjs/q2-option.cjs.entry.js +2 -2
  39. package/dist/cjs/q2-pagination.cjs.entry.js +4 -4
  40. package/dist/cjs/q2-pill.cjs.entry.js +2 -2
  41. package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
  42. package/dist/cjs/q2-radio.cjs.entry.js +1 -1
  43. package/dist/cjs/q2-relative-time.cjs.entry.js +2 -2
  44. package/dist/cjs/q2-resize-observer.cjs.entry.js +1 -1
  45. package/dist/cjs/q2-section.cjs.entry.js +3 -3
  46. package/dist/cjs/q2-select.cjs.entry.js +89 -13
  47. package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
  48. package/dist/cjs/q2-stepper-pane.cjs.entry.js +1 -1
  49. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +2 -2
  50. package/dist/cjs/q2-stepper.cjs.entry.js +2 -2
  51. package/dist/cjs/q2-tag.cjs.entry.js +2 -2
  52. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  53. package/dist/cjs/q2-textarea.cjs.entry.js +3 -2
  54. package/dist/cjs/q2-textarea.cjs.entry.js.map +1 -1
  55. package/dist/cjs/q2-tooltip.cjs.entry.js +1 -1
  56. package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -2
  57. package/dist/collection/components/click-elsewhere/click-elsewhere.js.map +1 -1
  58. package/dist/collection/components/click-elsewhere/test/click-elsewhere-test.e2e.js.map +1 -1
  59. package/dist/collection/components/q2-action-group/q2-action-group.js +1 -1
  60. package/dist/collection/components/q2-action-group/q2-action-group.js.map +1 -1
  61. package/dist/collection/components/q2-action-group/test/q2-action-group.e2e.js.map +1 -1
  62. package/dist/collection/components/q2-action-group/test/q2-action-group.spec.js.map +1 -1
  63. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js +1 -1
  64. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js.map +1 -1
  65. package/dist/collection/components/q2-action-sheet/test/q2-action-sheet-test.e2e.js.map +1 -1
  66. package/dist/collection/components/q2-avatar/q2-avatar.js +1 -1
  67. package/dist/collection/components/q2-avatar/q2-avatar.js.map +1 -1
  68. package/dist/collection/components/q2-avatar/test/q2-avatar-test.e2e.js.map +1 -1
  69. package/dist/collection/components/q2-badge/q2-badge.js.map +1 -1
  70. package/dist/collection/components/q2-badge/test/q2-badge-test.e2e.js.map +1 -1
  71. package/dist/collection/components/q2-btn/q2-btn.js +4 -0
  72. package/dist/collection/components/q2-btn/q2-btn.js.map +1 -1
  73. package/dist/collection/components/q2-btn/test/q2-btn-test.e2e.js.map +1 -1
  74. package/dist/collection/components/q2-calendar/q2-calendar-helpers.js.map +1 -1
  75. package/dist/collection/components/q2-calendar/q2-calendar-types.js.map +1 -1
  76. package/dist/collection/components/q2-calendar/q2-calendar-validation.js.map +1 -1
  77. package/dist/collection/components/q2-calendar/q2-calendar.js.map +1 -1
  78. package/dist/collection/components/q2-calendar/q2-month-picker.js +2 -2
  79. package/dist/collection/components/q2-calendar/q2-month-picker.js.map +1 -1
  80. package/dist/collection/components/q2-calendar/test/helpers-test.e2e.js.map +1 -1
  81. package/dist/collection/components/q2-calendar/test/q2-calendar-month-picker-test.e2e.js.map +1 -1
  82. package/dist/collection/components/q2-calendar/test/q2-calendar-test.e2e.js +2 -2
  83. package/dist/collection/components/q2-calendar/test/q2-calendar-test.e2e.js.map +1 -1
  84. package/dist/collection/components/q2-calendar/test/validation-test.e2e.js.map +1 -1
  85. package/dist/collection/components/q2-card/q2-card.js.map +1 -1
  86. package/dist/collection/components/q2-card/test/q2-card-test.e2e.js.map +1 -1
  87. package/dist/collection/components/q2-carousel/q2-carousel.js.map +1 -1
  88. package/dist/collection/components/q2-carousel/test/q2-carousel-test.e2e.js.map +1 -1
  89. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js +2 -2
  90. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js.map +1 -1
  91. package/dist/collection/components/q2-carousel-pane/test/q2-carousel-pane-test.e2e.js.map +1 -1
  92. package/dist/collection/components/q2-carousel-pane/test/q2-carousel-pane-test.spec.js.map +1 -1
  93. package/dist/collection/components/q2-chart-area/q2-chart-area.js +1 -1
  94. package/dist/collection/components/q2-chart-area/q2-chart-area.js.map +1 -1
  95. package/dist/collection/components/q2-chart-area/test/q2-chart-area-test.e2e.js.map +1 -1
  96. package/dist/collection/components/q2-chart-bar/q2-chart-bar.js +1 -1
  97. package/dist/collection/components/q2-chart-bar/q2-chart-bar.js.map +1 -1
  98. package/dist/collection/components/q2-chart-bar/test/q2-chart-bar-test.e2e.js.map +1 -1
  99. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js +1 -1
  100. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js.map +1 -1
  101. package/dist/collection/components/q2-chart-donut/test/q2-chart-donut-test.e2e.js.map +1 -1
  102. package/dist/collection/components/q2-checkbox/q2-checkbox.js.map +1 -1
  103. package/dist/collection/components/q2-checkbox/test/q2-checkbox-test.e2e.js.map +1 -1
  104. package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.js.map +1 -1
  105. package/dist/collection/components/q2-checkbox-group/test/q2-checkbox-group-test.e2e.js.map +1 -1
  106. package/dist/collection/components/q2-currency/q2-currency.js +1 -1
  107. package/dist/collection/components/q2-currency/q2-currency.js.map +1 -1
  108. package/dist/collection/components/q2-currency/test/q2-currency-test.e2e.js.map +1 -1
  109. package/dist/collection/components/q2-data-table/q2-data-table.js.map +1 -1
  110. package/dist/collection/components/q2-data-table/test/q2-data-table-test.e2e.js.map +1 -1
  111. package/dist/collection/components/q2-detail/q2-detail.js +1 -1
  112. package/dist/collection/components/q2-detail/q2-detail.js.map +1 -1
  113. package/dist/collection/components/q2-detail/test/q2-detail-test.e2e.js.map +1 -1
  114. package/dist/collection/components/q2-dropdown/q2-dropdown.js +9 -11
  115. package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
  116. package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js +5 -17
  117. package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js.map +1 -1
  118. package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.js.map +1 -1
  119. package/dist/collection/components/q2-dropdown-item/test/q2-dropdown-item-test.e2e.js.map +1 -1
  120. package/dist/collection/components/q2-editable-field/q2-editable-field.js +12 -7
  121. package/dist/collection/components/q2-editable-field/q2-editable-field.js.map +1 -1
  122. package/dist/collection/components/q2-editable-field/test/q2-editable-field-test.e2e.js.map +1 -1
  123. package/dist/collection/components/q2-example/q2-example.js +1 -1
  124. package/dist/collection/components/q2-example/q2-example.js.map +1 -1
  125. package/dist/collection/components/q2-example/test/q2-example.e2e.js.map +1 -1
  126. package/dist/collection/components/q2-example/test/q2-example.spec.js.map +1 -1
  127. package/dist/collection/components/q2-file-picker/q2-file-picker.js.map +1 -1
  128. package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.e2e.js.map +1 -1
  129. package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.spec.js.map +1 -1
  130. package/dist/collection/components/q2-formatted-text/q2-formatted-text.js +1 -1
  131. package/dist/collection/components/q2-formatted-text/q2-formatted-text.js.map +1 -1
  132. package/dist/collection/components/q2-formatted-text/test/q2-formatted-text-test.e2e.js.map +1 -1
  133. package/dist/collection/components/q2-icon/q2-icon-types.js.map +1 -1
  134. package/dist/collection/components/q2-icon/q2-icon.js +4 -0
  135. package/dist/collection/components/q2-icon/q2-icon.js.map +1 -1
  136. package/dist/collection/components/q2-icon/test/q2-icon-test.e2e.js.map +1 -1
  137. package/dist/collection/components/q2-input/formatting/alpha.js.map +1 -1
  138. package/dist/collection/components/q2-input/formatting/alpha.spec.js.map +1 -1
  139. package/dist/collection/components/q2-input/formatting/alphanumeric.js.map +1 -1
  140. package/dist/collection/components/q2-input/formatting/alphanumeric.spec.js.map +1 -1
  141. package/dist/collection/components/q2-input/formatting/credit-card.js.map +1 -1
  142. package/dist/collection/components/q2-input/formatting/credit-card.spec.js.map +1 -1
  143. package/dist/collection/components/q2-input/formatting/currency.js.map +1 -1
  144. package/dist/collection/components/q2-input/formatting/currency.spec.js.map +1 -1
  145. package/dist/collection/components/q2-input/formatting/date.js.map +1 -1
  146. package/dist/collection/components/q2-input/formatting/date.spec.js.map +1 -1
  147. package/dist/collection/components/q2-input/formatting/generic.js.map +1 -1
  148. package/dist/collection/components/q2-input/formatting/number.js.map +1 -1
  149. package/dist/collection/components/q2-input/formatting/numeric.js.map +1 -1
  150. package/dist/collection/components/q2-input/formatting/numeric.spec.js.map +1 -1
  151. package/dist/collection/components/q2-input/formatting/phone.js.map +1 -1
  152. package/dist/collection/components/q2-input/formatting/phone.spec.js.map +1 -1
  153. package/dist/collection/components/q2-input/formatting/postal.js.map +1 -1
  154. package/dist/collection/components/q2-input/formatting/postal.spec.js.map +1 -1
  155. package/dist/collection/components/q2-input/formatting/ssn.js.map +1 -1
  156. package/dist/collection/components/q2-input/formatting/ssn.spec.js.map +1 -1
  157. package/dist/collection/components/q2-input/formatting/tin.js.map +1 -1
  158. package/dist/collection/components/q2-input/formatting/tin.spec.js.map +1 -1
  159. package/dist/collection/components/q2-input/q2-input-types.js.map +1 -1
  160. package/dist/collection/components/q2-input/q2-input.js +1 -1
  161. package/dist/collection/components/q2-input/q2-input.js.map +1 -1
  162. package/dist/collection/components/q2-input/test/q2-input-credit-card-test.e2e.js.map +1 -1
  163. package/dist/collection/components/q2-input/test/q2-input-test.e2e.js.map +1 -1
  164. package/dist/collection/components/q2-input/test/q2-input-test.spec.js.map +1 -1
  165. package/dist/collection/components/q2-item/q2-item.js +1 -1
  166. package/dist/collection/components/q2-item/q2-item.js.map +1 -1
  167. package/dist/collection/components/q2-item/test/q2-item-test.e2e.js.map +1 -1
  168. package/dist/collection/components/q2-item/test/q2-item-test.spec.js.map +1 -1
  169. package/dist/collection/components/q2-legend/q2-legend.js +1 -1
  170. package/dist/collection/components/q2-legend/q2-legend.js.map +1 -1
  171. package/dist/collection/components/q2-legend/test/q2-legend-test.e2e.js.map +1 -1
  172. package/dist/collection/components/q2-legend/test/q2-legend-test.spec.js.map +1 -1
  173. package/dist/collection/components/q2-link/q2-link.js.map +1 -1
  174. package/dist/collection/components/q2-link/test/q2-link-test.e2e.js.map +1 -1
  175. package/dist/collection/components/q2-list/q2-list.js +1 -1
  176. package/dist/collection/components/q2-list/q2-list.js.map +1 -1
  177. package/dist/collection/components/q2-list/test/q2-list-test.e2e.js.map +1 -1
  178. package/dist/collection/components/q2-loading/q2-loading.js.map +1 -1
  179. package/dist/collection/components/q2-loading/skeleton/q2-loading-element/index.js.map +1 -1
  180. package/dist/collection/components/q2-loading/skeleton/shapes.js.map +1 -1
  181. package/dist/collection/components/q2-loading/test/q2-loading-element-test.e2e.js.map +1 -1
  182. package/dist/collection/components/q2-loading/test/q2-loading-test.e2e.js.map +1 -1
  183. package/dist/collection/components/q2-loc/q2-loc.js +1 -1
  184. package/dist/collection/components/q2-loc/q2-loc.js.map +1 -1
  185. package/dist/collection/components/q2-loc/test/q2-loc-test.e2e.js.map +1 -1
  186. package/dist/collection/components/q2-loc/test/q2-loc-test.spec.js.map +1 -1
  187. package/dist/collection/components/q2-message/q2-message.js +1 -1
  188. package/dist/collection/components/q2-message/q2-message.js.map +1 -1
  189. package/dist/collection/components/q2-message/test/q2-message-test.e2e.js.map +1 -1
  190. package/dist/collection/components/q2-optgroup/q2-optgroup.js +1 -1
  191. package/dist/collection/components/q2-optgroup/q2-optgroup.js.map +1 -1
  192. package/dist/collection/components/q2-optgroup/test/q2-optgroup-test.e2e.js.map +1 -1
  193. package/dist/collection/components/q2-option/q2-option.js +1 -1
  194. package/dist/collection/components/q2-option/q2-option.js.map +1 -1
  195. package/dist/collection/components/q2-option/test/q2-option-test.e2e.js.map +1 -1
  196. package/dist/collection/components/q2-option/test/q2-option-test.spec.js.map +1 -1
  197. package/dist/collection/components/q2-option-list/q2-option-list.js.map +1 -1
  198. package/dist/collection/components/q2-option-list/test/q2-option-list-test.e2e.js.map +1 -1
  199. package/dist/collection/components/q2-pagination/q2-pagination.js +3 -3
  200. package/dist/collection/components/q2-pagination/q2-pagination.js.map +1 -1
  201. package/dist/collection/components/q2-pagination/test/q2-pagination-test.e2e.js +1 -0
  202. package/dist/collection/components/q2-pagination/test/q2-pagination-test.e2e.js.map +1 -1
  203. package/dist/collection/components/q2-pill/q2-pill.js +1 -1
  204. package/dist/collection/components/q2-pill/q2-pill.js.map +1 -1
  205. package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js +1 -1
  206. package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js.map +1 -1
  207. package/dist/collection/components/q2-popover/q2-popover.css +18 -10
  208. package/dist/collection/components/q2-popover/q2-popover.js +64 -60
  209. package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
  210. package/dist/collection/components/q2-popover/test/q2-popover-test.e2e.js +1 -34
  211. package/dist/collection/components/q2-popover/test/q2-popover-test.e2e.js.map +1 -1
  212. package/dist/collection/components/q2-popover/test/q2-popover-test.spec.js +743 -435
  213. package/dist/collection/components/q2-popover/test/q2-popover-test.spec.js.map +1 -1
  214. package/dist/collection/components/q2-radio/q2-radio.js.map +1 -1
  215. package/dist/collection/components/q2-radio/test/q2-radio-test.e2e.js.map +1 -1
  216. package/dist/collection/components/q2-radio-group/q2-radio-group.js.map +1 -1
  217. package/dist/collection/components/q2-radio-group/test/q2-radio-group-test.e2e.js.map +1 -1
  218. package/dist/collection/components/q2-relative-time/q2-relative-time.js +1 -1
  219. package/dist/collection/components/q2-relative-time/q2-relative-time.js.map +1 -1
  220. package/dist/collection/components/q2-relative-time/test/q2-relative-time-test.e2e.js.map +1 -1
  221. package/dist/collection/components/q2-resize-observer/q2-resize-observer.js +1 -1
  222. package/dist/collection/components/q2-resize-observer/q2-resize-observer.js.map +1 -1
  223. package/dist/collection/components/q2-resize-observer/test/q2-resize-observer.e2e.js.map +1 -1
  224. package/dist/collection/components/q2-resize-observer/test/q2-resize-observer.spec.js.map +1 -1
  225. package/dist/collection/components/q2-section/q2-section.js +2 -2
  226. package/dist/collection/components/q2-section/q2-section.js.map +1 -1
  227. package/dist/collection/components/q2-section/test/q2-section-test.e2e.js.map +1 -1
  228. package/dist/collection/components/q2-select/q2-select.js +110 -15
  229. package/dist/collection/components/q2-select/q2-select.js.map +1 -1
  230. package/dist/collection/components/q2-select/test/q2-select-test.e2e.js +1 -1
  231. package/dist/collection/components/q2-select/test/q2-select-test.e2e.js.map +1 -1
  232. package/dist/collection/components/q2-select/test/q2-select-test.spec.js +412 -0
  233. package/dist/collection/components/q2-select/test/q2-select-test.spec.js.map +1 -0
  234. package/dist/collection/components/q2-stepper/q2-stepper.js +1 -1
  235. package/dist/collection/components/q2-stepper/q2-stepper.js.map +1 -1
  236. package/dist/collection/components/q2-stepper/test/q2-stepper-test.e2e.js.map +1 -1
  237. package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js.map +1 -1
  238. package/dist/collection/components/q2-stepper-pane/test/q2-stepper-pane-test.e2e.js.map +1 -1
  239. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +1 -1
  240. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js.map +1 -1
  241. package/dist/collection/components/q2-stepper-vertical/test/q2-stepper-vertical-test.e2e.js.map +1 -1
  242. package/dist/collection/components/q2-tab-container/q2-tab-container.js +1 -1
  243. package/dist/collection/components/q2-tab-container/q2-tab-container.js.map +1 -1
  244. package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.e2e.js.map +1 -1
  245. package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.spec.js.map +1 -1
  246. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
  247. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js.map +1 -1
  248. package/dist/collection/components/q2-tab-pane/test/q2-tab-pane-test.e2e.js.map +1 -1
  249. package/dist/collection/components/q2-tag/q2-tag.js +1 -1
  250. package/dist/collection/components/q2-tag/q2-tag.js.map +1 -1
  251. package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js +6 -1
  252. package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js.map +1 -1
  253. package/dist/collection/components/q2-textarea/q2-textarea.js +2 -1
  254. package/dist/collection/components/q2-textarea/q2-textarea.js.map +1 -1
  255. package/dist/collection/components/q2-textarea/test/q2-textarea-test.e2e.js.map +1 -1
  256. package/dist/collection/components/q2-tooltip/q2-tooltip.js.map +1 -1
  257. package/dist/collection/components/q2-tooltip/test/q2-tooltip-test.e2e.js.map +1 -1
  258. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane-types.js.map +1 -1
  259. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
  260. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js.map +1 -1
  261. package/dist/collection/components/tecton-tab-pane/test/tecton-tab-pane-test.e2e.js.map +1 -1
  262. package/dist/collection/index.js.map +1 -1
  263. package/dist/collection/utils/action-sheet.js.map +1 -1
  264. package/dist/collection/utils/charting.js.map +1 -1
  265. package/dist/collection/utils/helpers.js.map +1 -1
  266. package/dist/collection/utils/index.js.map +1 -1
  267. package/dist/collection/utils/sanitize-html-string.js.map +1 -1
  268. package/dist/collection/utils/sanitize-regex-string.js.map +1 -1
  269. package/dist/collection/utils/test/action-sheet-test.e2e.js.map +1 -1
  270. package/dist/collection/utils/test/index.spec.js.map +1 -1
  271. package/dist/components/index2.js +1 -20
  272. package/dist/components/index2.js.map +1 -1
  273. package/dist/components/q2-action-group.js +1 -1
  274. package/dist/components/q2-action-sheet.js +1 -1
  275. package/dist/components/q2-avatar2.js +1 -1
  276. package/dist/components/q2-btn2.js +4 -0
  277. package/dist/components/q2-btn2.js.map +1 -1
  278. package/dist/components/q2-carousel-pane.js +2 -2
  279. package/dist/components/q2-chart-area.js +1 -1
  280. package/dist/components/q2-chart-bar.js +1 -1
  281. package/dist/components/q2-chart-donut.js +1 -1
  282. package/dist/components/q2-currency.js +1 -1
  283. package/dist/components/q2-detail.js +1 -1
  284. package/dist/components/q2-dropdown.js +9 -11
  285. package/dist/components/q2-dropdown.js.map +1 -1
  286. package/dist/components/q2-editable-field.js +7 -8
  287. package/dist/components/q2-editable-field.js.map +1 -1
  288. package/dist/components/q2-example.js +1 -1
  289. package/dist/components/q2-formatted-text.js +1 -1
  290. package/dist/components/q2-icon2.js +4 -0
  291. package/dist/components/q2-icon2.js.map +1 -1
  292. package/dist/components/q2-input2.js +1 -1
  293. package/dist/components/q2-item2.js +1 -1
  294. package/dist/components/q2-legend2.js +1 -1
  295. package/dist/components/q2-list2.js +1 -1
  296. package/dist/components/q2-loc.js +1 -1
  297. package/dist/components/q2-message2.js +1 -1
  298. package/dist/components/q2-month-picker.js +2 -2
  299. package/dist/components/q2-optgroup2.js +1 -1
  300. package/dist/components/q2-option2.js +1 -1
  301. package/dist/components/q2-pagination.js +3 -3
  302. package/dist/components/q2-pill.js +1 -1
  303. package/dist/components/q2-popover2.js +63 -60
  304. package/dist/components/q2-popover2.js.map +1 -1
  305. package/dist/components/q2-relative-time.js +1 -1
  306. package/dist/components/q2-resize-observer2.js +1 -1
  307. package/dist/components/q2-section.js +2 -2
  308. package/dist/components/q2-select2.js +92 -16
  309. package/dist/components/q2-select2.js.map +1 -1
  310. package/dist/components/q2-stepper-vertical.js +1 -1
  311. package/dist/components/q2-stepper.js +1 -1
  312. package/dist/components/q2-tab-container.js +1 -1
  313. package/dist/components/q2-tab-pane.js +1 -1
  314. package/dist/components/q2-tag.js +1 -1
  315. package/dist/components/q2-textarea.js +2 -1
  316. package/dist/components/q2-textarea.js.map +1 -1
  317. package/dist/components/tecton-tab-pane.js +2 -2
  318. package/dist/esm/click-elsewhere_2.entry.js +64 -61
  319. package/dist/esm/click-elsewhere_2.entry.js.map +1 -1
  320. package/dist/esm/{index-d18e2a20.js → index-504f1a9e.js} +2 -21
  321. package/dist/esm/index-504f1a9e.js.map +1 -0
  322. package/dist/esm/loader.js +1 -1
  323. package/dist/esm/q2-action-group.entry.js +2 -2
  324. package/dist/esm/q2-action-sheet.entry.js +2 -2
  325. package/dist/esm/q2-avatar.entry.js +1 -1
  326. package/dist/esm/q2-badge_7.entry.js +12 -4
  327. package/dist/esm/q2-badge_7.entry.js.map +1 -1
  328. package/dist/esm/q2-calendar.entry.js +1 -1
  329. package/dist/esm/q2-card.entry.js +1 -1
  330. package/dist/esm/q2-carousel-pane.entry.js +3 -3
  331. package/dist/esm/q2-carousel.entry.js +1 -1
  332. package/dist/esm/q2-chart-area.entry.js +2 -2
  333. package/dist/esm/q2-chart-bar.entry.js +2 -2
  334. package/dist/esm/q2-chart-donut.entry.js +2 -2
  335. package/dist/esm/q2-checkbox-group.entry.js +1 -1
  336. package/dist/esm/q2-checkbox.entry.js +1 -1
  337. package/dist/esm/q2-currency.entry.js +1 -1
  338. package/dist/esm/q2-data-table.entry.js +1 -1
  339. package/dist/esm/q2-detail.entry.js +2 -2
  340. package/dist/esm/q2-dropdown-item.entry.js +1 -1
  341. package/dist/esm/q2-dropdown.entry.js +10 -12
  342. package/dist/esm/q2-dropdown.entry.js.map +1 -1
  343. package/dist/esm/q2-editable-field.entry.js +7 -8
  344. package/dist/esm/q2-editable-field.entry.js.map +1 -1
  345. package/dist/esm/q2-example.entry.js +1 -1
  346. package/dist/esm/q2-file-picker.entry.js +1 -1
  347. package/dist/esm/q2-formatted-text.entry.js +1 -1
  348. package/dist/esm/q2-item_3.entry.js +3 -3
  349. package/dist/esm/q2-legend.entry.js +1 -1
  350. package/dist/esm/q2-loc.entry.js +2 -2
  351. package/dist/esm/q2-message.entry.js +2 -2
  352. package/dist/esm/q2-month-picker.entry.js +3 -3
  353. package/dist/esm/q2-optgroup.entry.js +2 -2
  354. package/dist/esm/q2-option-list.entry.js +1 -1
  355. package/dist/esm/q2-option.entry.js +2 -2
  356. package/dist/esm/q2-pagination.entry.js +4 -4
  357. package/dist/esm/q2-pill.entry.js +2 -2
  358. package/dist/esm/q2-radio-group.entry.js +1 -1
  359. package/dist/esm/q2-radio.entry.js +1 -1
  360. package/dist/esm/q2-relative-time.entry.js +2 -2
  361. package/dist/esm/q2-resize-observer.entry.js +1 -1
  362. package/dist/esm/q2-section.entry.js +3 -3
  363. package/dist/esm/q2-select.entry.js +90 -14
  364. package/dist/esm/q2-select.entry.js.map +1 -1
  365. package/dist/esm/q2-stepper-pane.entry.js +1 -1
  366. package/dist/esm/q2-stepper-vertical.entry.js +2 -2
  367. package/dist/esm/q2-stepper.entry.js +2 -2
  368. package/dist/esm/q2-tag.entry.js +2 -2
  369. package/dist/esm/q2-tecton-elements.js +1 -1
  370. package/dist/esm/q2-textarea.entry.js +3 -2
  371. package/dist/esm/q2-textarea.entry.js.map +1 -1
  372. package/dist/esm/q2-tooltip.entry.js +1 -1
  373. package/dist/esm/tecton-tab-pane.entry.js +2 -2
  374. package/dist/jest.setup.js +22 -0
  375. package/dist/jest.setup.js.map +1 -0
  376. package/dist/q2-tecton-elements/click-elsewhere_2.entry.js +175 -163
  377. package/dist/q2-tecton-elements/click-elsewhere_2.entry.js.map +1 -1
  378. package/dist/q2-tecton-elements/{index-d18e2a20.js → index-504f1a9e.js} +51 -69
  379. package/dist/q2-tecton-elements/index-504f1a9e.js.map +1 -0
  380. package/dist/q2-tecton-elements/q2-action-group.entry.js +4 -4
  381. package/dist/q2-tecton-elements/q2-action-sheet.entry.js +34 -34
  382. package/dist/q2-tecton-elements/q2-avatar.entry.js +6 -6
  383. package/dist/q2-tecton-elements/q2-badge_7.entry.js +25 -17
  384. package/dist/q2-tecton-elements/q2-badge_7.entry.js.map +1 -1
  385. package/dist/q2-tecton-elements/q2-calendar.entry.js +1 -1
  386. package/dist/q2-tecton-elements/q2-card.entry.js +1 -1
  387. package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +21 -21
  388. package/dist/q2-tecton-elements/q2-carousel.entry.js +1 -1
  389. package/dist/q2-tecton-elements/q2-chart-area.entry.js +3 -3
  390. package/dist/q2-tecton-elements/q2-chart-bar.entry.js +3 -3
  391. package/dist/q2-tecton-elements/q2-chart-donut.entry.js +101 -101
  392. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +1 -1
  393. package/dist/q2-tecton-elements/q2-checkbox.entry.js +1 -1
  394. package/dist/q2-tecton-elements/q2-currency.entry.js +6 -6
  395. package/dist/q2-tecton-elements/q2-data-table.entry.js +1 -1
  396. package/dist/q2-tecton-elements/q2-detail.entry.js +39 -39
  397. package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +1 -1
  398. package/dist/q2-tecton-elements/q2-dropdown.entry.js +14 -16
  399. package/dist/q2-tecton-elements/q2-dropdown.entry.js.map +1 -1
  400. package/dist/q2-tecton-elements/q2-editable-field.entry.js +27 -18
  401. package/dist/q2-tecton-elements/q2-editable-field.entry.js.map +1 -1
  402. package/dist/q2-tecton-elements/q2-example.entry.js +1 -1
  403. package/dist/q2-tecton-elements/q2-file-picker.entry.js +1 -1
  404. package/dist/q2-tecton-elements/q2-formatted-text.entry.js +2 -2
  405. package/dist/q2-tecton-elements/q2-item_3.entry.js +19 -19
  406. package/dist/q2-tecton-elements/q2-legend.entry.js +2 -2
  407. package/dist/q2-tecton-elements/q2-loc.entry.js +5 -5
  408. package/dist/q2-tecton-elements/q2-message.entry.js +21 -21
  409. package/dist/q2-tecton-elements/q2-month-picker.entry.js +14 -14
  410. package/dist/q2-tecton-elements/q2-optgroup.entry.js +8 -8
  411. package/dist/q2-tecton-elements/q2-option-list.entry.js +1 -1
  412. package/dist/q2-tecton-elements/q2-option.entry.js +14 -14
  413. package/dist/q2-tecton-elements/q2-pagination.entry.js +34 -34
  414. package/dist/q2-tecton-elements/q2-pill.entry.js +14 -14
  415. package/dist/q2-tecton-elements/q2-radio-group.entry.js +1 -1
  416. package/dist/q2-tecton-elements/q2-radio.entry.js +1 -1
  417. package/dist/q2-tecton-elements/q2-relative-time.entry.js +2 -2
  418. package/dist/q2-tecton-elements/q2-resize-observer.entry.js +1 -1
  419. package/dist/q2-tecton-elements/q2-section.entry.js +19 -19
  420. package/dist/q2-tecton-elements/q2-select.entry.js +156 -92
  421. package/dist/q2-tecton-elements/q2-select.entry.js.map +1 -1
  422. package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +1 -1
  423. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +37 -37
  424. package/dist/q2-tecton-elements/q2-stepper.entry.js +29 -29
  425. package/dist/q2-tecton-elements/q2-tag.entry.js +25 -25
  426. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  427. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js.map +1 -1
  428. package/dist/q2-tecton-elements/q2-textarea.entry.js +4 -3
  429. package/dist/q2-tecton-elements/q2-textarea.entry.js.map +1 -1
  430. package/dist/q2-tecton-elements/q2-tooltip.entry.js +1 -1
  431. package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +6 -6
  432. package/dist/types/builds/q2e/development/tecton/tecton/packages/q2-tecton-elements/.stencil/jest.setup.d.ts +1 -0
  433. package/dist/types/components/q2-btn/q2-btn.d.ts +1 -0
  434. package/dist/types/components/q2-dropdown/q2-dropdown.d.ts +1 -4
  435. package/dist/types/components/q2-editable-field/q2-editable-field.d.ts +2 -1
  436. package/dist/types/components/q2-icon/q2-icon.d.ts +1 -0
  437. package/dist/types/components/q2-popover/q2-popover.d.ts +4 -4
  438. package/dist/types/components/q2-select/q2-select.d.ts +19 -0
  439. package/package.json +3 -3
  440. package/dist/cjs/index-07285783.js.map +0 -1
  441. package/dist/esm/index-d18e2a20.js.map +0 -1
  442. package/dist/q2-tecton-elements/index-d18e2a20.js.map +0 -1
@@ -1,14 +1,14 @@
1
- import { r as e, h as t, g as i } from "./index-7a5365e2.js";
1
+ import { r as t, h as e, g as i } from "./index-7a5365e2.js";
2
2
 
3
- import { e as l, l as s } from "./index-d18e2a20.js";
3
+ import { e as l, l as s } from "./index-504f1a9e.js";
4
4
 
5
5
  const a = "*{box-sizing:border-box}*:active{outline:none}*:focus{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}: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}:host{display:block}::slotted([slot]){display:flex;align-items:center;--tct-icon-size:var(--tct-detail-label-icon-size, 16px)}.detail{column-gap:var(--tct-detail-gap-column, var(--app-scale-1x, 5px));row-gap:var(--tct-detail-gap-row, 0px)}.detail-block{display:flex;width:100%}.detail-inline{display:flex}.detail-horizontal{align-items:var(--tct-detail-vertical-alignment, baseline);flex-direction:row}.detail-stacked{flex-direction:column}.detail-stacked-alignment-left{align-items:flex-start}.detail-stacked-alignment-right{align-items:flex-end}.label{flex:1;text-align:left;line-height:1.5;color:var(--tct-detail-label-font-color, #141430)}.label-size-xsmall{color:var(--tct-detail-label-xsmall-font-color, #6f6f82);font-size:var(--tct-detail-label-xsmall-font-size, 14px)}.label-size-small{color:var(--tct-detail-label-small-font-color);font-size:var(--tct-detail-label-small-font-size, 14px)}.label-size-medium{color:var(--tct-detail-label-medium-font-color);font-size:var(--tct-detail-label-medium-font-size, 14px)}.label-size-large{color:var(--tct-detail-label-large-font-color);font-size:var(--tct-detail-label-large-font-size, 16px)}.label-size-xlarge{color:var(--tct-detail-label-xlarge-font-color);font-size:var(--tct-detail-label-xlarge-font-size, 18px)}.label-size-inline{font-size:var(--tct-detail-label-inline-font-size, 1em);color:inherit}.description{flex:1;display:flex;align-items:center;line-height:1.5;color:var(--tct-detail-description-font-color, #141430);column-gap:var(--tct-detail-description-gap-column, var(--app-scale-1x, 5px))}.description-alignment-right{justify-content:flex-end}.description-size-xsmall{color:var(--tct-detail-description-xsmall-font-color, #6f6f82);font-size:var(--tct-detail-description-xsmall-font-size, 14px)}.description-size-small{color:var(--tct-detail-description-small-font-color);font-size:var(--tct-detail-description-small-font-size, 14px)}.description-size-medium{color:var(--tct-detail-description-medium-font-color);font-size:var(--tct-detail-description-medium-font-size, 24px)}.description-size-large{color:var(--tct-detail-description-large-font-color);font-size:var(--tct-detail-description-large-font-size, 28px)}.description-size-xlarge{color:var(--tct-detail-description-xlarge-font-color);font-size:var(--tct-detail-description-xlarge-font-size, 32px)}.description-size-inline{font-size:var(--tct-detail-description-inline-font-size, 1em);color:inherit}";
6
6
 
7
7
  const o = a;
8
8
 
9
9
  const n = class {
10
- constructor(t) {
11
- e(this, t);
10
+ constructor(e) {
11
+ t(this, e);
12
12
  this.alignment = "left";
13
13
  this.description = undefined;
14
14
  this.label = undefined;
@@ -23,36 +23,36 @@ const n = class {
23
23
  // #endregion
24
24
  // #region Local Methods
25
25
  get descriptionClasses() {
26
- const e = [ "description" ];
26
+ const t = [ "description" ];
27
27
  if (this.size) {
28
- e.push(`description-size-${this.size}`);
28
+ t.push(`description-size-${this.size}`);
29
29
  } else {
30
- e.push(`description-size-inline`);
30
+ t.push(`description-size-inline`);
31
31
  }
32
32
  if (!this.stacked) {
33
- e.push(`description-alignment-right`);
33
+ t.push(`description-alignment-right`);
34
34
  }
35
- return e.join(" ");
35
+ return t.join(" ");
36
36
  }
37
37
  get detailClasses() {
38
- const e = [ "detail" ];
38
+ const t = [ "detail" ];
39
39
  if (this.size) {
40
- e.push(`detail-block`);
40
+ t.push(`detail-block`);
41
41
  } else {
42
- e.push(`detail-inline`);
42
+ t.push(`detail-inline`);
43
43
  }
44
44
  if (this.stacked || this.onlyHasDescripiton || this.onlyHasLabel) {
45
- e.push("detail-stacked", `detail-stacked-alignment-${this.alignment}`);
45
+ t.push("detail-stacked", `detail-stacked-alignment-${this.alignment}`);
46
46
  } else {
47
- e.push("detail-horizontal");
47
+ t.push("detail-horizontal");
48
48
  }
49
- return e.join(" ");
49
+ return t.join(" ");
50
50
  }
51
51
  get hasDefaultSlotContent() {
52
- const e = !!this.hostElement.innerHTML.trim();
53
- const t = this.hostElement.querySelectorAll(":scope > [slot]").length;
52
+ const t = !!this.hostElement.innerHTML.trim();
53
+ const e = this.hostElement.querySelectorAll(":scope > [slot]").length;
54
54
  const i = this.hostElement.childNodes.length;
55
- return e && i > t;
55
+ return t && i > e;
56
56
  }
57
57
  get hasDescripiton() {
58
58
  return !!this.description || this.hasDefaultSlotContent;
@@ -64,16 +64,16 @@ const n = class {
64
64
  return l(this.hostElement, "label");
65
65
  }
66
66
  get labelClasses() {
67
- const e = [ "label" ];
67
+ const t = [ "label" ];
68
68
  if (this.size) {
69
- e.push(`label-size-${this.size}`);
69
+ t.push(`label-size-${this.size}`);
70
70
  } else {
71
- e.push(`label-size-inline`);
71
+ t.push(`label-size-inline`);
72
72
  }
73
73
  if (!this.stacked) {
74
- e.push(`label-align-left`);
74
+ t.push(`label-align-left`);
75
75
  }
76
- return e.join(" ");
76
+ return t.join(" ");
77
77
  }
78
78
  get onlyHasDescripiton() {
79
79
  return this.hasDescripiton && !this.hasLabel;
@@ -82,40 +82,40 @@ const n = class {
82
82
  return this.hasLabel && !this.hasDescripiton;
83
83
  }
84
84
  setSlotSizeProps() {
85
- const e = Array.from(this.hostElement.querySelectorAll(':scope > *:not([slot]), :scope > [slot="label"] > *'));
86
- e.forEach((e => {
87
- let t = this.size;
88
- if (e.localName === "q2-currency") {
89
- switch (t) {
85
+ const t = Array.from(this.hostElement.querySelectorAll(':scope > *:not([slot]), :scope > [slot="label"] > *'));
86
+ t.forEach((t => {
87
+ let e = this.size;
88
+ if (t.localName === "q2-currency") {
89
+ switch (e) {
90
90
  case "xsmall":
91
- t = "small";
91
+ e = "small";
92
92
  break;
93
93
 
94
94
  case "xlarge":
95
- t = "large";
95
+ e = "large";
96
96
  break;
97
97
  }
98
98
  }
99
- e.slotSize = t;
99
+ t.slotSize = e;
100
100
  }));
101
101
  }
102
102
  // #endregion
103
103
  // #region Render Methods
104
104
  render() {
105
- return t("div", {
106
- key: "279671eea96d480283a80f3de70e8a3057e153a0",
105
+ return e("div", {
106
+ key: "811c54a224bbbefce94cbf397a29a4cb1f98ba2b",
107
107
  class: this.detailClasses
108
- }, this.hasLabel && t("div", {
109
- key: "561d1ede1db345e2a7979947e463ba45db33559e",
108
+ }, this.hasLabel && e("div", {
109
+ key: "b2c294eb4c1b5cd525351dc67c2dc58ed4b75b70",
110
110
  class: this.labelClasses,
111
111
  "aria-describedby": !!this.description ? "label-description" : undefined
112
- }, !!this.label ? s(this.label) : this.hasLabelSlotContent ? t("slot", {
112
+ }, !!this.label ? s(this.label) : this.hasLabelSlotContent ? e("slot", {
113
113
  name: "label"
114
- }) : ""), this.hasDescripiton && t("div", {
115
- key: "e8f20b79064d73157058cee3d73496bbd346531f",
114
+ }) : ""), this.hasDescripiton && e("div", {
115
+ key: "9d979c672eeefd21882fa676483cd8020e15dc7c",
116
116
  id: "label-description",
117
117
  class: this.descriptionClasses
118
- }, !!this.description ? s(this.description) : this.hasDefaultSlotContent ? t("slot", null) : ""));
118
+ }, !!this.description ? s(this.description) : this.hasDefaultSlotContent ? e("slot", null) : ""));
119
119
  }
120
120
  get hostElement() {
121
121
  return i(this);
@@ -1,6 +1,6 @@
1
1
  import { r as t, h as o, g as e } from "./index-7a5365e2.js";
2
2
 
3
- import { l as r, a as i } from "./index-d18e2a20.js";
3
+ import { l as r, a as i } from "./index-504f1a9e.js";
4
4
 
5
5
  const d = "*{box-sizing:border-box}*:active{outline:none}*:focus{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}: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}.dropdown-separator{--comp-default-separator-margin:0 var(--tct-scale-1, var(--app-scale-3x, 15px));margin:var(--tct-dropdown-separator-margin, var(--t-dropdown-separator-margin, var(--comp-default-separator-margin)));border-bottom:1px solid var(--tct-dropdown-item-separator-color, var(--t-dropdown-item-separator-color, var(--tct-gray-11, var(--t-gray-11, var(--tct-gray-l1, var(--app-gray-l1, #cccccc))))))}.dropdown-item-wrapper{display:flex}.dropdown-item-button{--comp-dropdown-item-tween:var(--tct-tween-1, var(--app-tween-1, cubic-bezier(0.4, 0, 0.2, 1)));margin:var(--tct-scale-0, var(--app-scale-0x, 0));padding:var(--tct-scale-0, var(--app-scale-0x, 0));min-height:44px;min-width:44px;border:none;background:transparent;outline:0;transition:var(--tct-dropdown-item-tween, var(--comp-dropdown-item-tween));transition-property:background, color, box-shadow, fill, border-color, border-width}.dropdown-item-button:disabled{opacity:var(--tct-dropdown-item-disabled-opacity, var(--tct-disabled-opacity, var(--app-disabled-opacity, 0.4)));cursor:not-allowed}.dropdown-item{--comp-default-dropdown-item-padding:var(--app-scale-2x, 10px) var(--app-scale-3x, 15px);flex:1;text-align:left;padding:var(--tct-dropdown-item-padding, var(--t-dropdown-item-padding, var(--comp-default-dropdown-item-padding)));background:var(--tct-dropdown-item-background, var(--tct-dropdown-item-bg, var(--t-dropdown-item-bg, var(--tct-white, var(--t-base, var(--app-white, #ffffff))))));color:var(--tct-dropdown-item-font-color, var(--t-dropdown-item-font-color, inherit));overflow:hidden;text-overflow:ellipsis}:host(:not([disabled])) .remove-dropdown-item:hover,:host(:not([disabled])) .remove-dropdown-item:focus,:host(:not([disabled])) .dropdown-item:hover,:host(:not([disabled])) .dropdown-item:focus{background:var(--tct-dropdown-item-hover-background, var(--tct-dropdown-item-selected-bg, var(--t-dropdown-item-selected-bg, var(--tct-gray-14, var(--t-gray-14, var(--tct-gray-l3, var(--app-gray-l3, var(--t-base, #f2f2f2))))))))}:host(:not([disabled])) .dropdown-item:hover,:host(:not([disabled])) .dropdown-item:focus{color:var(--tct-dropdown-item-hover-color, var(--tct-dropdown-item-selected-font-color, var(--t-dropdown-item-selected-font-color, inherit)))}:host(:not([disabled])) .dropdown-item:focus,:host(:not([disabled])) .remove-dropdown-item:focus{box-shadow:var(--tct-dropdown-item-focus-box-shadow, var(--const-inset-double-focus-ring, inset 0 0 0 2px var(--t-base), inset 0 0 0 4px var(--const-focus-color), inset 0 0 0 6px var(--t-base)))}.remove-dropdown-item{flex:0 0 44px}";
6
6
 
@@ -1,6 +1,6 @@
1
1
  import { r as t, h as e, F as i, g as n } from "./index-7a5365e2.js";
2
2
 
3
- import { w as s, o, i as r, j as a, a as d, l as h } from "./index-d18e2a20.js";
3
+ import { w as s, o, i as r, j as a, a as d, l as h } from "./index-504f1a9e.js";
4
4
 
5
5
  const l = "*{box-sizing:border-box}*:active{outline:none}*:focus{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}: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}:host{display:inline-flex}:host([block]){display:block}q2-icon{pointer-events:none;margin-block:-100px}click-elsewhere{position:relative;display:block}q2-popover{--tct-popover-min-width:var(--tct-dropdown-width, var(--t-dropdown-width))}";
6
6
 
@@ -293,10 +293,6 @@ const u = class {
293
293
  const o = i[s];
294
294
  o && o.dispatchEvent(new Event("focus"));
295
295
  }
296
- navigateTo(t, e, i) {
297
- var n, s;
298
- return (s = (n = window.TectonElements) === null || n === void 0 ? void 0 : n.navigateTo) === null || s === void 0 ? void 0 : s.call(n, t, e, i);
299
- }
300
296
  orchestrateResolvedMenuItems() {
301
297
  if (!this.name || !this.context) {
302
298
  // this is only for contextual menu outlets
@@ -330,11 +326,17 @@ const u = class {
330
326
  }
331
327
  switch (t.action) {
332
328
  case "navigateTo":
333
- e = () => this.navigateTo(t.featureName, t.moduleName, i);
329
+ e = function() {
330
+ var e, n;
331
+ return (n = (e = window.TectonElements) === null || e === void 0 ? void 0 : e.navigateTo) === null || n === void 0 ? void 0 : n.call(e, t.featureName, t.moduleName, i);
332
+ };
334
333
  break;
335
334
 
336
335
  case "showOverpanel":
337
- e = () => this.showOverpanel(`${t.featureName}.${t.moduleName}`, i);
336
+ e = function() {
337
+ var e, n;
338
+ return (n = (e = window.TectonElements) === null || e === void 0 ? void 0 : e.showOverpanel) === null || n === void 0 ? void 0 : n.call(e, `${t.featureName}.${t.moduleName}`, i, undefined, true);
339
+ };
338
340
  break;
339
341
  }
340
342
  const n = document.createElement("q2-dropdown-item");
@@ -345,21 +347,17 @@ const u = class {
345
347
  return n;
346
348
  }))));
347
349
  }
348
- showOverpanel(t, e) {
349
- var i, n;
350
- return (n = (i = window.TectonElements) === null || i === void 0 ? void 0 : i.showOverpanel) === null || n === void 0 ? void 0 : n.call(i, t, e, undefined, true);
351
- }
352
350
  // #endregion
353
351
  // #region Render Methods
354
352
  render() {
355
353
  const t = this.toggleButtonProps;
356
354
  return e("click-elsewhere", {
357
- key: "9d6def955bd72208a856de2e4676adc934efea87",
355
+ key: "8e1168806f48fde1b2c0f549f013b3313f4bb04b",
358
356
  class: this.open ? "dropdown-open" : "",
359
357
  onChange: this.onClickElsewhere,
360
358
  "test-id": "dropdownContainer"
361
359
  }, e("q2-btn", {
362
- key: "dfb9de1b4d0762b370ae1bc06e3e89e9b8753f5a",
360
+ key: "bb9a31da210c6fa1afae6fbf1f0b8f98b6425ccd",
363
361
  ref: t => this.controlElement = t,
364
362
  class: t.className,
365
363
  onClick: this.onToggleClick,
@@ -385,7 +383,7 @@ const u = class {
385
383
  }) : " ", this.label && !this.hideLabel && e("span", {
386
384
  class: "dropdown-button-text"
387
385
  }, h(this.label)))), e("q2-popover", {
388
- key: "eb196e420c5379ff094926c230a56922beef0d76",
386
+ key: "7d5aa6bca5b4d6b494d556c49ec0c84e6e3f37b6",
389
387
  ref: t => this.popoverElement = t,
390
388
  controlElement: this.controlElement,
391
389
  open: this.open,
@@ -396,13 +394,13 @@ const u = class {
396
394
  mode: this.popoverMode || undefined,
397
395
  block: this.block
398
396
  }, e("div", {
399
- key: "7289ddbab50723b054dd1fbeb033c11c2e240439",
397
+ key: "b548e62ef46ca01018d742c443fc3aea42ab8875",
400
398
  onClick: this.onDropdownMenuClick,
401
399
  onKeyDown: this.onDropdownMenuKeydown,
402
400
  role: "menu",
403
401
  "aria-label": h(this.label) || undefined
404
402
  }, e("slot", {
405
- key: "c04e31c427b32aca47c7fb1b2f44eb761d39a42e"
403
+ key: "ef88abd2fd3d358b3f9e3464b4b5066bb373b31e"
406
404
  }))));
407
405
  }
408
406
  get hostElement() {
@@ -1 +1 @@
1
- {"version":3,"names":["q2DropdownCss","Q2DropdownStyle0","Q2Dropdown","this","dropdownItemSelector","closeDropdown","open","focusFirstItem","async","firstItem","hostElement","querySelector","waitForNextPaint","dispatchEvent","FocusEvent","focusLastItem","lastItem","focusToggle","controlElement","focus","onClickElsewhere","event","target","localName","stopPropagation","popoverElement","onDropdownMenuClick","item","disabled","separator","onDropdownMenuKeydown","key","preventDefault","focusAdjacentItem","onToggleClick","openDropdown","onToggleKeydown","componentWillLoad","popDirectionHandler","alignmentHandler","ariaLabelHandler","componentDidLoad","orchestrateResolvedMenuItems","overrideFocus","delegateFocus","isEventFromElement","popoverStateHandler","detail","_a","scrollContainerTo","top","closePopover","_togglePopover","openPopover","selectItem","value","itemBtn","shadowRoot","click","selectRemoveItem","removeButton","additionalContextHandler","handleRenamedProp","handleAriaLabel","contextHandler","contextValueHandler","nameHandler","resolvedTypeHandler","determineDropdownItemCount","querySelectorAll","length","hasCustomControl","toggleButtonProps","allowedIntents","allowedTypes","type","includes","icon","fab","custom","intent","active","ariaExpanded","className","activeItem","direction","dropdownItems","Array","from","activeIndex","indexOf","targetIndex","targetItem","Event","navigateTo","featureName","moduleName","queryParams","_b","window","TectonElements","call","name","context","removeResolvedElements","resolveMenuItemElements","then","data","forEach","element","appendChild","catch","err","resolvedElements","removeChild","resolveMenu","contextValue","resolvedType","additionalContext","datas","map","menuItemData","onClickFn","contextIdParamName","action","showOverpanel","newDropdownItem","document","createElement","setAttribute","itemLabel","classList","add","textContent","onclick","overpanelPath","params","undefined","render","btnProps","h","class","onChange","ref","el","onClick","onKeyDown","label","hideLabel","loc","ariaHasPopup","block","description","Fragment","popoverMaxHeight","minHeight","popoverMinHeight","popoverDirection","align","popoverAlignment","mode","popoverMode","role"],"sources":["src/components/q2-dropdown/q2-dropdown.scss?tag=q2-dropdown&encapsulation=shadow","src/components/q2-dropdown/q2-dropdown.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: inline-flex;\n}\n\n:host([block]) {\n display: block;\n}\n\nq2-icon {\n pointer-events: none;\n margin-block: -100px;\n}\n\nclick-elsewhere {\n position: relative;\n display: block;\n}\n\nq2-popover {\n --tct-popover-min-width: #{var-list(var-prefixer(dropdown-width))};\n}\n","import { Component, ComponentInterface, Prop, Method, Element, Watch, h, Fragment, Listen } from '@stencil/core';\nimport { IDict } from 'src/util';\nimport {\n handleAriaLabel,\n handleRenamedProp,\n isEventFromElement,\n loc,\n overrideFocus,\n waitForNextPaint,\n} from 'src/utils';\n\n@Component({ tag: 'q2-dropdown', shadow: true, styleUrl: 'q2-dropdown.scss' })\nexport class Q2Dropdown implements ComponentInterface {\n // #region Own Properties\n\n controlElement?: HTMLQ2BtnElement;\n dropdownItemSelector: string = 'q2-dropdown-item:not([disabled]):not([separator])';\n popoverElement?: HTMLQ2PopoverElement;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n @Prop({ reflect: true })\n additionalContext: string;\n\n /** @deprecated */\n @Prop({ reflect: true })\n alignment: 'left' | 'right';\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n /** If `true`, component expands to fill the width of its parent element. */\n @Prop({ reflect: true })\n block: boolean;\n\n /**\n * Tells the outlet what the type of object being passed in as contextValue.\n * This will allow for the hierarchy resolution logic to work to determine if an option should or should not be shown.\n *\n * @info\n * Only applicable when using `<q2-dropdown>` for outlets.\n */\n @Prop({ reflect: true })\n context: string;\n\n /**\n * Passes important information to the outlet (e.g., pass an account id that your platform can use to look up what module to show for that account type).\n *\n * @info\n * Only applicable when using `<q2-dropdown>` for outlets.\n */\n @Prop({ reflect: true })\n contextValue: string;\n\n /** Indicates the menu cannot be focused or interacted with. */\n @Prop({ reflect: true })\n disabled: boolean;\n\n /**\n * Hide's the field's `<label>` element from view.\n * @warning\n * Only use when a visible label is impractical.\n */\n @Prop({ reflect: true, mutable: true })\n hideLabel: boolean;\n\n /** The icon that will render within the toggle button. You may use any of the `q2-icon` types. */\n @Prop({ reflect: true })\n icon: string;\n\n /**\n * The text that appears within the button.\n * @warning\n * This property should not be used if the `type` is `icon`.\n * @localizable\n */\n @Prop({ reflect: true, mutable: true })\n label: string;\n\n /**\n * Identifies this menu as an outlet. Used in conjunction with context and, optionally, `contextValue`.\n * @info\n * Only applicable when using `<q2-dropdown>` for outlets.\n */\n @Prop({ reflect: true })\n name: string;\n\n /**\n * Determine whether the popover is open or closed.\n *\n * @readonly\n */\n @Prop({ reflect: true, mutable: true })\n open: boolean;\n\n /** @deprecated */\n @Prop({ reflect: true })\n popDirection: 'up' | 'down';\n\n /** Aligns the popover dropdown to the left or right side of the input field. */\n @Prop({ mutable: true })\n popoverAlignment: 'left' | 'right' = 'left'; // being used in dropdown.scss\n\n /**\n * Force the direction of the popover dropdown when it opens.\n * If no value is passed, the component will auto-detect the direction based on available space.\n */\n @Prop({ mutable: true })\n popoverDirection: 'up' | 'down';\n\n /**\n * Force the maximum height of the popover. This value will be interpreted as pixels.\n * If no value is passed, or the value exceeds available space, the component will auto-detect the maximum height based on available space.\n */\n @Prop()\n popoverMaxHeight: number;\n\n /** @deprecated */\n @Prop()\n popoverMinHeight: number;\n\n /**\n * Determines the display mode of the popover.\n *\n * Providing a value of `legacy` instructs the popover to use absolute positioning instead of fixed positioning.\n *\n * @info\n * This is a temporary solution to work around styling issues related to using fixed positioning for the popover\n * when nested inside of elements with transform properties. This will be removed once the popover API is available\n * for use.\n */\n @Prop({ mutable: true })\n popoverMode: 'legacy' = null;\n\n /**\n * Use with `context` to tell the outlet where it appears. It will be matched with the appropriately configured module for that context.\n * @info\n * Only applicable when using `<q2-dropdown>` for outlets.\n */\n @Prop({ reflect: true })\n resolvedType: string;\n\n /** The type of button used as the menu toggle.\n * @info\n * Type must be \"custom\" to use the custom button slot.\n */\n @Prop({ reflect: true })\n type: 'icon' | 'fab' | 'custom' | 'primary' | 'secondary' | 'neutral' = 'icon';\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n this.popDirectionHandler();\n this.alignmentHandler();\n this.ariaLabelHandler();\n }\n\n componentDidLoad() {\n this.orchestrateResolvedMenuItems();\n overrideFocus(this.hostElement);\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.focusToggle();\n }\n\n @Listen('popoverStateChanged')\n popoverStateHandler({ detail: { open } }: CustomEvent<{ open: boolean }>) {\n if (this.open !== open) this.open = open;\n this.popoverElement?.scrollContainerTo({ top: 0 });\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * Emulates clicking the dropdown `<button>` to hide the popover if it is showing.\n * @testOnly\n */\n @Method()\n async closePopover() {\n if (!this.open || this.disabled) return;\n this._togglePopover();\n }\n\n /**\n * Emulates clicking the dropdown `<button>` to show the popover if it is hidden.\n * @testOnly\n */\n @Method()\n async openPopover() {\n if (this.open || this.disabled) return;\n this._togglePopover();\n }\n\n /**\n * Emulates opening the dropdown and selecting a [Dropdown Item](https://tecton.q2developer.com/design-system/q2-dropdown-item/).\n *\n * If the dropdown is closed, this will open it before selecting the item.\n *\n * If the value does not match any item's value, this method does nothing.\n * @testOnly\n */\n @Method()\n async selectItem(value: string) {\n const item = this.hostElement.querySelector<HTMLQ2DropdownItemElement>(\n `${this.dropdownItemSelector}[value=\"${value}\"]`\n );\n const itemBtn = item?.shadowRoot.querySelector<HTMLButtonElement>('.dropdown-item');\n if (!item || this.disabled) return;\n if (!this.open) {\n this.controlElement?.click();\n await waitForNextPaint();\n }\n itemBtn.click();\n await waitForNextPaint();\n }\n\n /**\n * Emulates opening the dropdown and selecting a [Dropdown Item](https://tecton.q2developer.com/design-system/q2-dropdown-item/)'s *remove* button.\n *\n * If the dropdown is closed, this will open it before selecting the remove item button.\n *\n * Requirements for this method to work properly:\n * - Provided `value` matches the item's `value` property\n * - Item has the `removable` property enabled\n * @testOnly\n */\n @Method()\n async selectRemoveItem(value: string) {\n const item = this.hostElement.querySelector<HTMLQ2DropdownItemElement>(\n `${this.dropdownItemSelector}[value=\"${value}\"]`\n );\n const removeButton = item?.shadowRoot.querySelector<HTMLButtonElement>('.remove-dropdown-item');\n if (!item || !removeButton || this.disabled) return;\n if (!this.open) {\n this.controlElement?.click();\n await waitForNextPaint();\n }\n removeButton.click();\n await waitForNextPaint();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('additionalContext')\n additionalContextHandler() {\n this.orchestrateResolvedMenuItems();\n }\n\n @Watch('alignment')\n alignmentHandler() {\n handleRenamedProp(this, 'alignment', 'popoverAlignment');\n }\n\n @Watch('ariaLabel')\n ariaLabelHandler() {\n handleAriaLabel(this);\n }\n\n @Watch('context')\n contextHandler() {\n this.orchestrateResolvedMenuItems();\n }\n\n @Watch('contextValue')\n contextValueHandler() {\n this.orchestrateResolvedMenuItems();\n }\n\n @Watch('name')\n nameHandler() {\n this.orchestrateResolvedMenuItems();\n }\n\n @Watch('popDirection')\n popDirectionHandler() {\n handleRenamedProp(this, 'popDirection', 'popoverDirection');\n }\n\n @Watch('resolvedType')\n resolvedTypeHandler() {\n this.orchestrateResolvedMenuItems();\n }\n\n // #endregion\n // #region Local Methods\n\n get determineDropdownItemCount() {\n return this.hostElement.querySelectorAll(this.dropdownItemSelector).length;\n }\n\n get hasCustomControl() {\n return !!this.hostElement.querySelector('[slot=control]');\n }\n\n get toggleButtonProps() {\n const allowedIntents = ['primary', 'secondary', 'neutral'];\n const allowedTypes = ['icon', 'fab', 'custom', ...allowedIntents];\n const type = allowedTypes.includes(this.type) ? this.type : '';\n const icon = type === 'icon';\n const fab = type === 'fab';\n const custom = type === 'custom';\n let intent;\n if (allowedIntents.includes(type)) {\n intent = type === 'neutral' ? type : `workflow-${type}`;\n }\n const active = this.open;\n const disabled = !!this.disabled;\n const ariaExpanded = this.open;\n const className = !icon && !fab && !intent ? 'unstyled' : '';\n\n return {\n icon,\n fab,\n intent,\n active,\n disabled,\n ariaExpanded,\n className,\n custom,\n };\n }\n\n _togglePopover() {\n const { controlElement } = this;\n if (!controlElement) return;\n controlElement.click();\n controlElement.focus();\n controlElement.dispatchEvent(new FocusEvent('focus'));\n }\n\n closeDropdown = () => {\n if (!this.open) return;\n this.open = false;\n };\n\n focusAdjacentItem(activeItem: HTMLQ2DropdownItemElement, direction: 'next' | 'prev') {\n const dropdownItems: HTMLQ2DropdownItemElement[] = Array.from(\n this.hostElement.querySelectorAll(this.dropdownItemSelector)\n );\n\n const activeIndex = dropdownItems.indexOf(activeItem);\n\n if (activeIndex === -1) {\n return;\n }\n\n let targetIndex: number = 0;\n if (direction === 'next') {\n targetIndex = activeIndex < dropdownItems.length - 1 ? activeIndex + 1 : 0;\n } else if (direction === 'prev') {\n if (activeIndex > 0) {\n targetIndex = activeIndex - 1;\n } else {\n targetIndex = dropdownItems.length - 1;\n }\n }\n const targetItem = dropdownItems[targetIndex];\n targetItem && targetItem.dispatchEvent(new Event('focus'));\n }\n\n focusFirstItem = async () => {\n const firstItem = this.hostElement.querySelector<HTMLQ2DropdownItemElement>(\n `${this.dropdownItemSelector}:first-child`\n );\n if (!firstItem) return;\n await waitForNextPaint();\n firstItem.dispatchEvent(new FocusEvent('focus'));\n };\n\n focusLastItem = async () => {\n const lastItem = this.hostElement.querySelector<HTMLQ2DropdownItemElement>(\n `${this.dropdownItemSelector}:last-child`\n );\n if (!lastItem) return;\n await waitForNextPaint();\n lastItem.dispatchEvent(new FocusEvent('focus'));\n };\n\n focusToggle = () => {\n this.controlElement.focus();\n };\n\n navigateTo(featureName: string, moduleName?: string, queryParams?: IDict<string>) {\n return window.TectonElements?.navigateTo?.(featureName, moduleName, queryParams);\n }\n\n onClickElsewhere = (event: CustomEvent) => {\n const target = event.target as HTMLClickElsewhereElement;\n if (target.localName === 'click-elsewhere') {\n event.stopPropagation();\n const { popoverElement } = this;\n if (!popoverElement) return;\n popoverElement.open = false;\n }\n };\n\n onDropdownMenuClick = async (event: MouseEvent | CustomEvent) => {\n const item = event.target as HTMLQ2DropdownItemElement;\n if (item.disabled || item.separator) return;\n this.closeDropdown();\n await waitForNextPaint();\n this.focusToggle();\n };\n\n onDropdownMenuKeydown = (event: KeyboardEvent) => {\n const item = event.target as HTMLQ2DropdownItemElement;\n switch (event.key) {\n case 'Escape':\n this.closeDropdown();\n this.focusToggle();\n break;\n\n case 'Tab':\n this.closeDropdown();\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n this.focusAdjacentItem(item, 'prev');\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n this.focusAdjacentItem(item, 'next');\n break;\n\n default:\n break;\n }\n };\n\n onToggleClick = () => {\n if (this.open) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n };\n\n onToggleKeydown = async (event: KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n this.openDropdown();\n await waitForNextPaint();\n this.focusLastItem();\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n this.openDropdown();\n await waitForNextPaint();\n this.focusFirstItem();\n return;\n\n case 'Escape':\n event.preventDefault();\n this.closeDropdown();\n break;\n\n case 'Tab':\n if (this.open) this.closeDropdown();\n break;\n\n default:\n break;\n }\n };\n\n openDropdown = () => {\n if (this.open) return;\n this.open = true;\n };\n\n orchestrateResolvedMenuItems() {\n if (!this.name || !this.context) {\n // this is only for contextual menu outlets\n this.removeResolvedElements();\n return;\n }\n\n this.resolveMenuItemElements()\n .then(data => {\n this.removeResolvedElements();\n data.forEach(element => {\n this.hostElement.appendChild(element);\n });\n })\n .catch(err => {\n this.removeResolvedElements();\n throw err;\n });\n }\n\n removeResolvedElements() {\n const resolvedElements = this.hostElement.querySelectorAll('q2-dropdown-item.resolved-menu-item');\n resolvedElements.forEach(element => this.hostElement.removeChild(element));\n }\n\n resolveMenu() {\n return (\n this.name &&\n window.TectonElements &&\n window.TectonElements.resolveMenu(this.name, this.contextValue, this.resolvedType, this.additionalContext)\n );\n }\n\n resolveMenuItemElements() {\n return this.resolveMenu().then(datas => {\n return datas.map(menuItemData => {\n let onClickFn;\n let queryParams;\n if (menuItemData['tct-ctxid']) {\n queryParams = {};\n queryParams[menuItemData.contextIdParamName] = menuItemData['tct-ctxid'];\n }\n\n switch (menuItemData.action) {\n case 'navigateTo':\n onClickFn = () =>\n this.navigateTo(menuItemData.featureName, menuItemData.moduleName, queryParams);\n break;\n case 'showOverpanel':\n onClickFn = () =>\n this.showOverpanel(`${menuItemData.featureName}.${menuItemData.moduleName}`, queryParams);\n break;\n }\n\n const newDropdownItem = document.createElement('q2-dropdown-item');\n newDropdownItem.setAttribute('value', menuItemData.itemLabel);\n newDropdownItem.classList.add('resolved-menu-item');\n newDropdownItem.textContent = menuItemData.itemLabel;\n newDropdownItem.onclick = onClickFn;\n\n return newDropdownItem;\n });\n });\n }\n\n showOverpanel(overpanelPath: string, params: IDict<string>) {\n return window.TectonElements?.showOverpanel?.(overpanelPath, params, undefined, true);\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n const btnProps = this.toggleButtonProps;\n\n return (\n <click-elsewhere\n class={this.open ? 'dropdown-open' : ''}\n onChange={this.onClickElsewhere}\n test-id=\"dropdownContainer\"\n >\n <q2-btn\n ref={el => (this.controlElement = el)}\n class={btnProps.className}\n onClick={this.onToggleClick}\n onKeyDown={this.onToggleKeydown}\n fab={btnProps.fab}\n intent={btnProps.intent}\n active={btnProps.active}\n disabled={btnProps.disabled}\n ariaExpanded={`${!!btnProps.ariaExpanded}`}\n label={this.hideLabel && this.label ? loc(this.label) : undefined}\n hideLabel={this.hideLabel}\n ariaHasPopup=\"menu\"\n test-id=\"dropdownButton\"\n block={this.block}\n description={loc('tecton.element.dropdown.itemCount', [this.determineDropdownItemCount])}\n >\n {this.hasCustomControl ? (\n <div\n test-id=\"dropdownControl\"\n class={btnProps.custom ? '' : 'hidden'}\n >\n <slot name=\"control\" />\n </div>\n ) : (\n <Fragment>\n {this.icon ? <q2-icon type={this.icon} /> : ' '}\n {this.label && !this.hideLabel && (\n <span class=\"dropdown-button-text\">{loc(this.label)}</span>\n )}\n </Fragment>\n )}\n </q2-btn>\n <q2-popover\n ref={el => (this.popoverElement = el)}\n controlElement={this.controlElement}\n open={this.open}\n max-height={this.popoverMaxHeight}\n minHeight={this.popoverMinHeight}\n direction={this.popoverDirection}\n align={this.popoverAlignment}\n mode={this.popoverMode || undefined}\n block={this.block}\n >\n <div\n onClick={this.onDropdownMenuClick}\n onKeyDown={this.onDropdownMenuKeydown}\n role=\"menu\"\n aria-label={loc(this.label) || undefined}\n >\n <slot />\n </div>\n </q2-popover>\n </click-elsewhere>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["q2DropdownCss","Q2DropdownStyle0","Q2Dropdown","this","dropdownItemSelector","closeDropdown","open","focusFirstItem","async","firstItem","hostElement","querySelector","waitForNextPaint","dispatchEvent","FocusEvent","focusLastItem","lastItem","focusToggle","controlElement","focus","onClickElsewhere","event","target","localName","stopPropagation","popoverElement","onDropdownMenuClick","item","disabled","separator","onDropdownMenuKeydown","key","preventDefault","focusAdjacentItem","onToggleClick","openDropdown","onToggleKeydown","componentWillLoad","popDirectionHandler","alignmentHandler","ariaLabelHandler","componentDidLoad","orchestrateResolvedMenuItems","overrideFocus","delegateFocus","isEventFromElement","popoverStateHandler","detail","_a","scrollContainerTo","top","closePopover","_togglePopover","openPopover","selectItem","value","itemBtn","shadowRoot","click","selectRemoveItem","removeButton","additionalContextHandler","handleRenamedProp","handleAriaLabel","contextHandler","contextValueHandler","nameHandler","resolvedTypeHandler","determineDropdownItemCount","querySelectorAll","length","hasCustomControl","toggleButtonProps","allowedIntents","allowedTypes","type","includes","icon","fab","custom","intent","active","ariaExpanded","className","activeItem","direction","dropdownItems","Array","from","activeIndex","indexOf","targetIndex","targetItem","Event","name","context","removeResolvedElements","resolveMenuItemElements","then","data","forEach","element","appendChild","catch","err","resolvedElements","removeChild","resolveMenu","window","TectonElements","contextValue","resolvedType","additionalContext","datas","map","menuItemData","onClickFn","queryParams","contextIdParamName","action","_b","navigateTo","call","featureName","moduleName","showOverpanel","undefined","newDropdownItem","document","createElement","setAttribute","itemLabel","classList","add","textContent","onclick","render","btnProps","h","class","onChange","ref","el","onClick","onKeyDown","label","hideLabel","loc","ariaHasPopup","block","description","Fragment","popoverMaxHeight","minHeight","popoverMinHeight","popoverDirection","align","popoverAlignment","mode","popoverMode","role"],"sources":["src/components/q2-dropdown/q2-dropdown.scss?tag=q2-dropdown&encapsulation=shadow","src/components/q2-dropdown/q2-dropdown.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: inline-flex;\n}\n\n:host([block]) {\n display: block;\n}\n\nq2-icon {\n pointer-events: none;\n margin-block: -100px;\n}\n\nclick-elsewhere {\n position: relative;\n display: block;\n}\n\nq2-popover {\n --tct-popover-min-width: #{var-list(var-prefixer(dropdown-width))};\n}\n","import { Component, ComponentInterface, Prop, Method, Element, Watch, h, Fragment, Listen } from '@stencil/core';\nimport {\n handleAriaLabel,\n handleRenamedProp,\n isEventFromElement,\n loc,\n overrideFocus,\n waitForNextPaint,\n} from 'src/utils';\n\n@Component({ tag: 'q2-dropdown', shadow: true, styleUrl: 'q2-dropdown.scss' })\nexport class Q2Dropdown implements ComponentInterface {\n // #region Own Properties\n\n controlElement?: HTMLQ2BtnElement;\n dropdownItemSelector: string = 'q2-dropdown-item:not([disabled]):not([separator])';\n popoverElement?: HTMLQ2PopoverElement;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n @Prop({ reflect: true })\n additionalContext: string;\n\n /** @deprecated */\n @Prop({ reflect: true })\n alignment: 'left' | 'right';\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n /** If `true`, component expands to fill the width of its parent element. */\n @Prop({ reflect: true })\n block: boolean;\n\n /**\n * Tells the outlet what the type of object being passed in as contextValue.\n * This will allow for the hierarchy resolution logic to work to determine if an option should or should not be shown.\n *\n * @info\n * Only applicable when using `<q2-dropdown>` for outlets.\n */\n @Prop({ reflect: true })\n context: string;\n\n /**\n * Passes important information to the outlet (e.g., pass an account id that your platform can use to look up what module to show for that account type).\n *\n * @info\n * Only applicable when using `<q2-dropdown>` for outlets.\n */\n @Prop({ reflect: true })\n contextValue: string;\n\n /** Indicates the menu cannot be focused or interacted with. */\n @Prop({ reflect: true })\n disabled: boolean;\n\n /**\n * Hide's the field's `<label>` element from view.\n * @warning\n * Only use when a visible label is impractical.\n */\n @Prop({ reflect: true, mutable: true })\n hideLabel: boolean;\n\n /** The icon that will render within the toggle button. You may use any of the `q2-icon` types. */\n @Prop({ reflect: true })\n icon: string;\n\n /**\n * The text that appears within the button.\n * @warning\n * This property should not be used if the `type` is `icon`.\n * @localizable\n */\n @Prop({ reflect: true, mutable: true })\n label: string;\n\n /**\n * Identifies this menu as an outlet. Used in conjunction with context and, optionally, `contextValue`.\n * @info\n * Only applicable when using `<q2-dropdown>` for outlets.\n */\n @Prop({ reflect: true })\n name: string;\n\n /**\n * Determine whether the popover is open or closed.\n *\n * @readonly\n */\n @Prop({ reflect: true, mutable: true })\n open: boolean;\n\n /** @deprecated */\n @Prop({ reflect: true })\n popDirection: 'up' | 'down';\n\n /** Aligns the popover dropdown to the left or right side of the input field. */\n @Prop({ mutable: true })\n popoverAlignment: 'left' | 'right' = 'left'; // being used in dropdown.scss\n\n /**\n * Force the direction of the popover dropdown when it opens.\n * If no value is passed, the component will auto-detect the direction based on available space.\n */\n @Prop({ mutable: true })\n popoverDirection: 'up' | 'down';\n\n /**\n * Force the maximum height of the popover. This value will be interpreted as pixels.\n * If no value is passed, or the value exceeds available space, the component will auto-detect the maximum height based on available space.\n */\n @Prop()\n popoverMaxHeight: number;\n\n /** @deprecated */\n @Prop()\n popoverMinHeight: number;\n\n /**\n * Determines the display mode of the popover.\n *\n * Providing a value of `legacy` instructs the popover to use absolute positioning instead of fixed positioning.\n *\n * @info\n * This is a temporary solution to work around styling issues related to using fixed positioning for the popover\n * when nested inside of elements with transform properties. This will be removed once the popover API is available\n * for use.\n */\n @Prop({ mutable: true })\n popoverMode: 'legacy' = null;\n\n /**\n * Use with `context` to tell the outlet where it appears. It will be matched with the appropriately configured module for that context.\n * @info\n * Only applicable when using `<q2-dropdown>` for outlets.\n */\n @Prop({ reflect: true })\n resolvedType: string;\n\n /** The type of button used as the menu toggle.\n * @info\n * Type must be \"custom\" to use the custom button slot.\n */\n @Prop({ reflect: true })\n type: 'icon' | 'fab' | 'custom' | 'primary' | 'secondary' | 'neutral' = 'icon';\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n this.popDirectionHandler();\n this.alignmentHandler();\n this.ariaLabelHandler();\n }\n\n componentDidLoad() {\n this.orchestrateResolvedMenuItems();\n overrideFocus(this.hostElement);\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.focusToggle();\n }\n\n @Listen('popoverStateChanged')\n popoverStateHandler({ detail: { open } }: CustomEvent<{ open: boolean }>) {\n if (this.open !== open) this.open = open;\n this.popoverElement?.scrollContainerTo({ top: 0 });\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * Emulates clicking the dropdown `<button>` to hide the popover if it is showing.\n * @testOnly\n */\n @Method()\n async closePopover() {\n if (!this.open || this.disabled) return;\n this._togglePopover();\n }\n\n /**\n * Emulates clicking the dropdown `<button>` to show the popover if it is hidden.\n * @testOnly\n */\n @Method()\n async openPopover() {\n if (this.open || this.disabled) return;\n this._togglePopover();\n }\n\n /**\n * Emulates opening the dropdown and selecting a [Dropdown Item](https://tecton.q2developer.com/design-system/q2-dropdown-item/).\n *\n * If the dropdown is closed, this will open it before selecting the item.\n *\n * If the value does not match any item's value, this method does nothing.\n * @testOnly\n */\n @Method()\n async selectItem(value: string) {\n const item = this.hostElement.querySelector<HTMLQ2DropdownItemElement>(\n `${this.dropdownItemSelector}[value=\"${value}\"]`\n );\n const itemBtn = item?.shadowRoot.querySelector<HTMLButtonElement>('.dropdown-item');\n if (!item || this.disabled) return;\n if (!this.open) {\n this.controlElement?.click();\n await waitForNextPaint();\n }\n itemBtn.click();\n await waitForNextPaint();\n }\n\n /**\n * Emulates opening the dropdown and selecting a [Dropdown Item](https://tecton.q2developer.com/design-system/q2-dropdown-item/)'s *remove* button.\n *\n * If the dropdown is closed, this will open it before selecting the remove item button.\n *\n * Requirements for this method to work properly:\n * - Provided `value` matches the item's `value` property\n * - Item has the `removable` property enabled\n * @testOnly\n */\n @Method()\n async selectRemoveItem(value: string) {\n const item = this.hostElement.querySelector<HTMLQ2DropdownItemElement>(\n `${this.dropdownItemSelector}[value=\"${value}\"]`\n );\n const removeButton = item?.shadowRoot.querySelector<HTMLButtonElement>('.remove-dropdown-item');\n if (!item || !removeButton || this.disabled) return;\n if (!this.open) {\n this.controlElement?.click();\n await waitForNextPaint();\n }\n removeButton.click();\n await waitForNextPaint();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('additionalContext')\n additionalContextHandler() {\n this.orchestrateResolvedMenuItems();\n }\n\n @Watch('alignment')\n alignmentHandler() {\n handleRenamedProp(this, 'alignment', 'popoverAlignment');\n }\n\n @Watch('ariaLabel')\n ariaLabelHandler() {\n handleAriaLabel(this);\n }\n\n @Watch('context')\n contextHandler() {\n this.orchestrateResolvedMenuItems();\n }\n\n @Watch('contextValue')\n contextValueHandler() {\n this.orchestrateResolvedMenuItems();\n }\n\n @Watch('name')\n nameHandler() {\n this.orchestrateResolvedMenuItems();\n }\n\n @Watch('popDirection')\n popDirectionHandler() {\n handleRenamedProp(this, 'popDirection', 'popoverDirection');\n }\n\n @Watch('resolvedType')\n resolvedTypeHandler() {\n this.orchestrateResolvedMenuItems();\n }\n\n // #endregion\n // #region Local Methods\n\n get determineDropdownItemCount() {\n return this.hostElement.querySelectorAll(this.dropdownItemSelector).length;\n }\n\n get hasCustomControl() {\n return !!this.hostElement.querySelector('[slot=control]');\n }\n\n get toggleButtonProps() {\n const allowedIntents = ['primary', 'secondary', 'neutral'];\n const allowedTypes = ['icon', 'fab', 'custom', ...allowedIntents];\n const type = allowedTypes.includes(this.type) ? this.type : '';\n const icon = type === 'icon';\n const fab = type === 'fab';\n const custom = type === 'custom';\n let intent;\n if (allowedIntents.includes(type)) {\n intent = type === 'neutral' ? type : `workflow-${type}`;\n }\n const active = this.open;\n const disabled = !!this.disabled;\n const ariaExpanded = this.open;\n const className = !icon && !fab && !intent ? 'unstyled' : '';\n\n return {\n icon,\n fab,\n intent,\n active,\n disabled,\n ariaExpanded,\n className,\n custom,\n };\n }\n\n _togglePopover() {\n const { controlElement } = this;\n if (!controlElement) return;\n controlElement.click();\n controlElement.focus();\n controlElement.dispatchEvent(new FocusEvent('focus'));\n }\n\n closeDropdown = () => {\n if (!this.open) return;\n this.open = false;\n };\n\n focusAdjacentItem(activeItem: HTMLQ2DropdownItemElement, direction: 'next' | 'prev') {\n const dropdownItems: HTMLQ2DropdownItemElement[] = Array.from(\n this.hostElement.querySelectorAll(this.dropdownItemSelector)\n );\n\n const activeIndex = dropdownItems.indexOf(activeItem);\n\n if (activeIndex === -1) {\n return;\n }\n\n let targetIndex: number = 0;\n if (direction === 'next') {\n targetIndex = activeIndex < dropdownItems.length - 1 ? activeIndex + 1 : 0;\n } else if (direction === 'prev') {\n if (activeIndex > 0) {\n targetIndex = activeIndex - 1;\n } else {\n targetIndex = dropdownItems.length - 1;\n }\n }\n const targetItem = dropdownItems[targetIndex];\n targetItem && targetItem.dispatchEvent(new Event('focus'));\n }\n\n focusFirstItem = async () => {\n const firstItem = this.hostElement.querySelector<HTMLQ2DropdownItemElement>(\n `${this.dropdownItemSelector}:first-child`\n );\n if (!firstItem) return;\n await waitForNextPaint();\n firstItem.dispatchEvent(new FocusEvent('focus'));\n };\n\n focusLastItem = async () => {\n const lastItem = this.hostElement.querySelector<HTMLQ2DropdownItemElement>(\n `${this.dropdownItemSelector}:last-child`\n );\n if (!lastItem) return;\n await waitForNextPaint();\n lastItem.dispatchEvent(new FocusEvent('focus'));\n };\n\n focusToggle = () => {\n this.controlElement.focus();\n };\n\n onClickElsewhere = (event: CustomEvent) => {\n const target = event.target as HTMLClickElsewhereElement;\n if (target.localName === 'click-elsewhere') {\n event.stopPropagation();\n const { popoverElement } = this;\n if (!popoverElement) return;\n popoverElement.open = false;\n }\n };\n\n onDropdownMenuClick = async (event: MouseEvent | CustomEvent) => {\n const item = event.target as HTMLQ2DropdownItemElement;\n if (item.disabled || item.separator) return;\n this.closeDropdown();\n await waitForNextPaint();\n this.focusToggle();\n };\n\n onDropdownMenuKeydown = (event: KeyboardEvent) => {\n const item = event.target as HTMLQ2DropdownItemElement;\n switch (event.key) {\n case 'Escape':\n this.closeDropdown();\n this.focusToggle();\n break;\n\n case 'Tab':\n this.closeDropdown();\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n this.focusAdjacentItem(item, 'prev');\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n this.focusAdjacentItem(item, 'next');\n break;\n\n default:\n break;\n }\n };\n\n onToggleClick = () => {\n if (this.open) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n };\n\n onToggleKeydown = async (event: KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n this.openDropdown();\n await waitForNextPaint();\n this.focusLastItem();\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n this.openDropdown();\n await waitForNextPaint();\n this.focusFirstItem();\n return;\n\n case 'Escape':\n event.preventDefault();\n this.closeDropdown();\n break;\n\n case 'Tab':\n if (this.open) this.closeDropdown();\n break;\n\n default:\n break;\n }\n };\n\n openDropdown = () => {\n if (this.open) return;\n this.open = true;\n };\n\n orchestrateResolvedMenuItems() {\n if (!this.name || !this.context) {\n // this is only for contextual menu outlets\n this.removeResolvedElements();\n return;\n }\n\n this.resolveMenuItemElements()\n .then(data => {\n this.removeResolvedElements();\n data.forEach(element => {\n this.hostElement.appendChild(element);\n });\n })\n .catch(err => {\n this.removeResolvedElements();\n throw err;\n });\n }\n\n removeResolvedElements() {\n const resolvedElements = this.hostElement.querySelectorAll('q2-dropdown-item.resolved-menu-item');\n resolvedElements.forEach(element => this.hostElement.removeChild(element));\n }\n\n resolveMenu() {\n return (\n this.name &&\n window.TectonElements &&\n window.TectonElements.resolveMenu(this.name, this.contextValue, this.resolvedType, this.additionalContext)\n );\n }\n\n resolveMenuItemElements() {\n return this.resolveMenu().then(datas => {\n return datas.map(menuItemData => {\n let onClickFn;\n let queryParams;\n if (menuItemData['tct-ctxid']) {\n queryParams = {};\n queryParams[menuItemData.contextIdParamName] = menuItemData['tct-ctxid'];\n }\n\n switch (menuItemData.action) {\n case 'navigateTo':\n onClickFn = function () {\n return window.TectonElements?.navigateTo?.(\n menuItemData.featureName,\n menuItemData.moduleName,\n queryParams\n );\n };\n break;\n case 'showOverpanel':\n onClickFn = function () {\n return window.TectonElements?.showOverpanel?.(\n `${menuItemData.featureName}.${menuItemData.moduleName}`,\n queryParams,\n undefined,\n true\n );\n };\n break;\n }\n\n const newDropdownItem = document.createElement('q2-dropdown-item');\n newDropdownItem.setAttribute('value', menuItemData.itemLabel);\n newDropdownItem.classList.add('resolved-menu-item');\n newDropdownItem.textContent = menuItemData.itemLabel;\n newDropdownItem.onclick = onClickFn;\n\n return newDropdownItem;\n });\n });\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n const btnProps = this.toggleButtonProps;\n\n return (\n <click-elsewhere\n class={this.open ? 'dropdown-open' : ''}\n onChange={this.onClickElsewhere}\n test-id=\"dropdownContainer\"\n >\n <q2-btn\n ref={el => (this.controlElement = el)}\n class={btnProps.className}\n onClick={this.onToggleClick}\n onKeyDown={this.onToggleKeydown}\n fab={btnProps.fab}\n intent={btnProps.intent}\n active={btnProps.active}\n disabled={btnProps.disabled}\n ariaExpanded={`${!!btnProps.ariaExpanded}`}\n label={this.hideLabel && this.label ? loc(this.label) : undefined}\n hideLabel={this.hideLabel}\n ariaHasPopup=\"menu\"\n test-id=\"dropdownButton\"\n block={this.block}\n description={loc('tecton.element.dropdown.itemCount', [this.determineDropdownItemCount])}\n >\n {this.hasCustomControl ? (\n <div\n test-id=\"dropdownControl\"\n class={btnProps.custom ? '' : 'hidden'}\n >\n <slot name=\"control\" />\n </div>\n ) : (\n <Fragment>\n {this.icon ? <q2-icon type={this.icon} /> : ' '}\n {this.label && !this.hideLabel && (\n <span class=\"dropdown-button-text\">{loc(this.label)}</span>\n )}\n </Fragment>\n )}\n </q2-btn>\n <q2-popover\n ref={el => (this.popoverElement = el)}\n controlElement={this.controlElement}\n open={this.open}\n max-height={this.popoverMaxHeight}\n minHeight={this.popoverMinHeight}\n direction={this.popoverDirection}\n align={this.popoverAlignment}\n mode={this.popoverMode || undefined}\n block={this.block}\n >\n <div\n onClick={this.onDropdownMenuClick}\n onKeyDown={this.onDropdownMenuKeydown}\n role=\"menu\"\n aria-label={loc(this.label) || undefined}\n >\n <slot />\n </div>\n </q2-popover>\n </click-elsewhere>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { r as t, c as i, h as e, g as s } from "./index-7a5365e2.js";
2
2
 
3
- import { a as n, o as a, i as h, w as r, l as d } from "./index-d18e2a20.js";
3
+ import { a as n, o as a, i as h, w as r, l as d } from "./index-504f1a9e.js";
4
4
 
5
5
  const l = "*{box-sizing:border-box}*:active{outline:none}*:focus{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}: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}:host{display:inline-block;max-width:100%}.q2-editable-field-wrapper:not([hidden]){display:flex}.q2-editable-field-wrapper.editing{align-items:flex-end}:host([block]){display:block;width:100%}:host([block]) .q2-editable-field-wrapper:not([hidden]){display:grid;grid-template-columns:1fr auto auto}q2-input,.text-wrapper{margin:0 var(--tct-scale-2, var(--app-scale-2x, 10px)) 0 0}q2-input{flex:1 1 auto;min-width:170px}.text-wrapper{flex:0 auto;align-self:center;display:inline-block}:host([truncated]) .text-wrapper{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}q2-btn{flex:0 0 44px}dl{margin:var(--tct-scale-0, var(--app-scale-0x, 0))}dt{font-weight:600}dd{margin-left:var(--tct-scale-0, var(--app-scale-0x, 0));display:flex;align-items:center}";
6
6
 
@@ -90,7 +90,6 @@ const c = class {
90
90
  componentDidRender() {
91
91
  this.scheduledAfterRender.forEach((t => t()));
92
92
  this.scheduledAfterRender = [];
93
- this.formattedValue = this.inputElement.formattedValue;
94
93
  }
95
94
  // #endregion
96
95
  // #region Listeners
@@ -122,6 +121,9 @@ const c = class {
122
121
  if (!h(t, this.hostElement)) return;
123
122
  this.hostElement.shadowRoot.querySelector(this.editing ? "q2-input" : "q2-btn.begin-edit").focus();
124
123
  }
124
+ inputFormatted(t) {
125
+ this.formattedValue = t.detail.formattedValue;
126
+ }
125
127
  // #endregion
126
128
  // #region Public Methods API
127
129
  /**
@@ -200,19 +202,6 @@ const c = class {
200
202
  get wrapperClass() {
201
203
  return `q2-editable-field-wrapper ${this.editing ? "editing" : ""}`;
202
204
  }
203
- generateEditBtn() {
204
- return e("q2-btn", {
205
- ref: t => this.editBtnElement = t,
206
- class: "begin-edit",
207
- label: `${d("tecton.element.editableField.edit")} ${this.locLabel}`,
208
- "hide-label": true,
209
- disabled: this.disabled,
210
- "test-id": "editButton",
211
- onClick: this.editClick
212
- }, e("q2-icon", {
213
- type: "edit"
214
- }));
215
- }
216
205
  generateEditStateDOM() {
217
206
  return e("div", {
218
207
  class: this.wrapperClass,
@@ -262,20 +251,40 @@ const c = class {
262
251
  class: "read-state-label"
263
252
  }, this.locLabel), e("dd", null, e("span", {
264
253
  class: "text-wrapper"
265
- }, this.formattedValue || this.value), this.generateEditBtn())));
254
+ }, this.formattedValue || this.value), e("q2-btn", {
255
+ ref: t => this.editBtnElement = t,
256
+ class: "begin-edit",
257
+ label: `${d("tecton.element.editableField.edit")} ${this.locLabel}`,
258
+ "hide-label": true,
259
+ disabled: this.disabled,
260
+ "test-id": "editButton",
261
+ onClick: this.editClick
262
+ }, e("q2-icon", {
263
+ type: "edit"
264
+ })))));
266
265
  }
267
266
  return e("div", {
268
267
  class: this.wrapperClass,
269
268
  hidden: this.editing
270
269
  }, e("div", {
271
270
  class: "text-wrapper"
272
- }, this.formattedValue || this.value), this.generateEditBtn());
271
+ }, this.formattedValue || this.value), e("q2-btn", {
272
+ ref: t => this.editBtnElement = t,
273
+ class: "begin-edit",
274
+ label: `${d("tecton.element.editableField.edit")} ${this.locLabel}`,
275
+ "hide-label": true,
276
+ disabled: this.disabled,
277
+ "test-id": "editButton",
278
+ onClick: this.editClick
279
+ }, e("q2-icon", {
280
+ type: "edit"
281
+ })));
273
282
  }
274
283
  // #endregion
275
284
  // #region Render Methods
276
285
  render() {
277
286
  return e("div", {
278
- key: "255dac3b6e39618e37fc129ef0a743aca1aefc88"
287
+ key: "4dd832e58ab37f49b7026b6b297de802c83f630b"
279
288
  }, this.generateEditStateDOM(), this.generateReadStateDOM());
280
289
  }
281
290
  get hostElement() {
@@ -1 +1 @@
1
- {"version":3,"names":["q2EditableFieldCss","Q2EditableFieldStyle0","Q2EditableField","this","scheduledAfterRender","cancelClick","event","stopPropagation","change","emit","editing","name","inputElement","setValue","defaultValue","editClick","inputChange","e","inputClick","inputInput","input","detail","formattedValue","innerValue","value","inputKeyDown","key","preventDefault","saveClick","valueFromInputProp","hostElement","shadowRoot","querySelector","componentWillLoad","handleAriaLabel","componentDidLoad","overrideFocus","componentDidRender","forEach","fn","onHostElementChange","isEventFromElement","onchange","queueMicrotask","hasErrors","focus","delegateFocus","clickCancel","_a","cancelBtnElement","click","clickEdit","editBtnElement","clickSave","saveBtnElement","options","waitForNextPaint","ariaLabelObserver","observesEditing","newValue","oldValue","push","errorsObserver","focusedElement","activeElement","isInputFocused","tagName","Array","isArray","errors","length","hasHints","hints","locLabel","label","loc","wrapperClass","generateEditBtn","h","ref","el","class","disabled","onClick","type","generateEditStateDOM","hidden","hideLabel","undefined","formatModifier","maxlength","onInput","onChange","onKeyDown","generateReadStateDOM","persistentLabel","render"],"sources":["src/components/q2-editable-field/q2-editable-field.scss?tag=q2-editable-field&encapsulation=shadow","src/components/q2-editable-field/q2-editable-field.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n\n:host {\n display: inline-block;\n max-width: 100%;\n}\n\n.q2-editable-field-wrapper:not([hidden]) {\n display: flex;\n}\n\n.q2-editable-field-wrapper.editing {\n align-items: flex-end;\n}\n\n:host([block]) {\n display:block;\n width: 100%;\n .q2-editable-field-wrapper:not([hidden]) {\n display: grid;\n grid-template-columns: 1fr auto auto;\n }\n}\n\nq2-input,\n.text-wrapper {\n margin: 0 var(--tct-scale-2, var(--app-scale-2x, 10px)) 0 0;\n}\n\nq2-input {\n flex: 1 1 auto;\n min-width: 170px;\n}\n\n.text-wrapper {\n flex: 0 auto;\n align-self: center;\n display: inline-block;\n}\n\n:host([truncated]) .text-wrapper {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\nq2-btn {\n flex: 0 0 44px;\n}\n\ndl {\n margin: var(--tct-scale-0, var(--app-scale-0x, 0));\n}\n\ndt {\n font-weight: 600;\n}\n\ndd {\n margin-left: var(--tct-scale-0, var(--app-scale-0x, 0));\n display: flex;\n align-items: center;\n}\n","import { Component, State, Prop, h, Listen, Element, Event, EventEmitter, Method, Watch } from '@stencil/core';\nimport { IEventDetail, Q2InputCustomEvent } from 'src/components';\nimport { handleAriaLabel, isEventFromElement, loc, overrideFocus, waitForNextPaint } from 'src/utils';\nimport { Q2Input } from '../q2-input/q2-input';\nimport { IFormatterValueObject } from '../q2-input/q2-input-types';\n\ninterface IExtendedQ2InputElement extends HTMLQ2InputElement {\n formattedValue: IFormatterValueObject['formattedValue'];\n}\n\n@Component({ tag: 'q2-editable-field', shadow: true, styleUrl: 'q2-editable-field.scss' })\nexport class Q2EditableField {\n // #region Own Properties\n\n cancelBtnElement: HTMLQ2BtnElement;\n defaultValue: string;\n editBtnElement: HTMLQ2BtnElement;\n innerValue: string;\n inputElement: HTMLQ2InputElement;\n saveBtnElement: HTMLQ2BtnElement;\n scheduledAfterRender: (() => void)[] = [];\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n formattedValue: string;\n\n // #endregion\n // #region Public Property API\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n /** If `true`, component expands to fill the width of its parent element. */\n @Prop({ reflect: true })\n block: boolean;\n\n /** Disables the edit button and field. */\n @Prop({ reflect: true })\n disabled: boolean;\n\n /** Controls the edit state of the element. */\n @Prop({ reflect: true, mutable: true })\n editing: boolean = false;\n\n /**\n * Determines the `errors` applied to the `q2-input` element.\n *\n * See [q2-input](https://tecton.q2developer.com/design-system/q2-input/) for more information.\n */\n @Prop()\n errors: string[];\n\n /**\n * Determines the `formatModifier` applied to the `q2-input` element.\n * @info\n * Only applicable when `type=\"currency\"`.\n *\n * See [q2-input](https://tecton.q2developer.com/design-system/q2-input/) for more information.\n */\n @Prop({ reflect: true })\n formatModifier: string;\n\n /** Hide's the field's `<label>` element from view. */\n @Prop({ reflect: true, mutable: true })\n hideLabel: boolean;\n\n /**\n * Determines the `hints` applied to the `q2-input` element.\n *\n * See [q2-input](https://tecton.q2developer.com/design-system/q2-input/) for more information.\n */\n @Prop()\n hints: string[];\n\n /**\n * The visible descriptor for the element.\n * Serves as the input label while in the edit state and as a decorative label for the read state when `persistentLabel` is `true`.\n * @localizable\n */\n @Prop({ reflect: true, mutable: true })\n label: string = '';\n\n /**\n * Determines the `maxLength` applied to the `q2-input`.\n *\n * See [q2-input](https://tecton.q2developer.com/design-system/q2-input/) for more information.\n */\n @Prop({ reflect: true })\n maxlength: number;\n\n /** Displays the provided label in the read state. */\n @Prop({ reflect: true })\n persistentLabel: boolean;\n\n /** Shortens long values with ellipses instead of splitting into multiple lines. */\n @Prop({ reflect: true })\n truncated: boolean;\n\n /**\n * Determines the `type` applied to the `q2-input` element.\n *\n * See [q2-input](https://tecton.q2developer.com/design-system/q2-input/) for all `type` values.\n */\n @Prop({ reflect: true })\n type: Q2Input['type'];\n\n /** Serves as the visible text while in the read state, and the default value of the input while in the edit state. */\n @Prop({ reflect: true, mutable: true })\n value: string = '';\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the 'Edit', 'Cancel', or 'Save' buttons are clicked.\n *\n * The event detail will not include a `value` or `formattedValue` if the event name is 'edit' or 'cancel'.\n *@info\n * If you are utilizing events to provide input validation, it is recommended you use the `input` event, not the `change` event.\n */\n @Event()\n change: EventEmitter<{\n editing: boolean;\n name: 'edit' | 'cancel' | 'save';\n value?: string;\n formattedValue?: string;\n }>;\n\n /**\n * Emitted when the user updates the `q2-input` element in the editing state.\n */\n @Event()\n input: EventEmitter<{ formattedValue: string; value: string }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n handleAriaLabel(this);\n\n this.defaultValue = this.value;\n }\n\n componentDidLoad() {\n overrideFocus(this.hostElement);\n }\n\n componentDidRender() {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n this.formattedValue = (this.inputElement as IExtendedQ2InputElement).formattedValue;\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('change')\n onHostElementChange(event: CustomEvent) {\n if (!isEventFromElement(event, this.hostElement) || this.hostElement.onchange) return;\n queueMicrotask(() => {\n switch (event.detail.name) {\n case 'save':\n if (this.hasErrors) {\n this.inputElement.focus();\n break;\n }\n this.value = event.detail.value;\n this.editing = event.detail.editing;\n break;\n\n case 'cancel':\n this.inputElement.value = this.value;\n this.editing = event.detail.editing;\n break;\n\n case 'edit':\n this.editing = event.detail.editing;\n break;\n }\n });\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.hostElement.shadowRoot.querySelector<HTMLElement>(this.editing ? 'q2-input' : 'q2-btn.begin-edit').focus();\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * Emulates clicking the cancel button, which will hide the `<q2-input>` field.\n *\n * @testOnly\n */\n @Method()\n clickCancel() {\n if (!this.editing) return;\n this.cancelBtnElement?.click();\n }\n\n /**\n * Emulates clicking the edit button, which will display the `<q2-input>` field.\n *\n * @testOnly\n */\n @Method()\n clickEdit() {\n if (this.editing) return;\n this.editBtnElement?.click();\n }\n\n /**\n * Emulates clicking the save button, saving value in the `<q2-input>` field, and emitting a `change` event.\n *\n * @testOnly\n */\n @Method()\n clickSave() {\n if (!this.editing) return;\n this.saveBtnElement?.click();\n }\n\n /**\n * Emulates clicking the edit button, and setting the value of the `<q2-input>` field.\n *\n * If the `clickSave` argument is `true` (default), the save button will be clicked after the value is set, and a\\\n * `change` event will be emitted.\n *\n * @testOnly\n */\n @Method()\n async setValue(value: string, options: { clickSave?: boolean } = { clickSave: true }) {\n await this.clickEdit();\n await waitForNextPaint();\n\n await this.inputElement.setValue(value);\n\n if (options.clickSave) {\n await this.clickSave();\n await waitForNextPaint();\n }\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\n }\n\n @Watch('editing')\n observesEditing(newValue: boolean, oldValue: boolean) {\n if (newValue === oldValue) return;\n this.scheduledAfterRender.push(this.hostElement.focus);\n }\n\n @Watch('errors')\n errorsObserver() {\n const { editing, hasErrors } = this;\n const focusedElement = this.hostElement.shadowRoot.activeElement;\n const isInputFocused = focusedElement?.tagName === 'Q2-INPUT';\n if (isInputFocused || !focusedElement || !editing || !hasErrors) return;\n this.inputElement.focus();\n }\n\n // #endregion\n // #region Local Methods\n\n get hasErrors(): boolean {\n return Array.isArray(this.errors) && !!this.errors.length;\n }\n\n get hasHints(): boolean {\n return Array.isArray(this.hints) && !!this.hints.length;\n }\n\n get locLabel() {\n return (this.label && loc(this.label)) || '';\n }\n\n get wrapperClass() {\n return `q2-editable-field-wrapper ${this.editing ? 'editing' : ''}`;\n }\n\n cancelClick = (event?: MouseEvent) => {\n event?.stopPropagation();\n this.change.emit({ editing: false, name: 'cancel' });\n this.inputElement.setValue(this.defaultValue);\n };\n\n editClick = (event: MouseEvent) => {\n event?.stopPropagation();\n this.change.emit({ editing: true, name: 'edit' });\n };\n\n generateEditBtn() {\n return (\n <q2-btn\n ref={el => (this.editBtnElement = el)}\n class=\"begin-edit\"\n label={`${loc('tecton.element.editableField.edit')} ${this.locLabel}`}\n hide-label\n disabled={this.disabled}\n test-id=\"editButton\"\n onClick={this.editClick}\n >\n <q2-icon type=\"edit\" />\n </q2-btn>\n );\n }\n\n generateEditStateDOM() {\n return (\n <div\n class={this.wrapperClass}\n hidden={!this.editing}\n >\n <q2-input\n ref={el => (this.inputElement = el)}\n label={this.locLabel}\n hideLabel={this.hideLabel}\n value={this.value}\n hints={this.hasHints ? this.hints : undefined}\n errors={this.hasErrors ? this.errors : undefined}\n type={this.type}\n disabled={this.disabled}\n formatModifier={this.formatModifier}\n maxlength={this.maxlength}\n test-id=\"editableInput\"\n onInput={this.inputInput}\n onChange={this.inputChange}\n onKeyDown={this.inputKeyDown}\n onClick={this.inputClick}\n />\n <q2-btn\n ref={el => (this.cancelBtnElement = el)}\n class=\"cancel-edit\"\n label={`${loc('tecton.element.editableField.cancel')} ${this.locLabel}`}\n hide-label\n test-id=\"cancelButton\"\n onClick={this.cancelClick}\n >\n <q2-icon type=\"close\" />\n </q2-btn>\n <q2-btn\n ref={el => (this.saveBtnElement = el)}\n class=\"save-edit\"\n label={`${loc('tecton.element.editableField.save')} ${this.locLabel}`}\n hide-label\n test-id=\"saveButton\"\n onClick={this.saveClick}\n >\n <q2-icon type=\"checkmark\" />\n </q2-btn>\n </div>\n );\n }\n\n generateReadStateDOM() {\n if (this.persistentLabel && this.locLabel) {\n return (\n <div\n class={this.wrapperClass}\n hidden={this.editing}\n >\n <dl>\n <dt class=\"read-state-label\">{this.locLabel}</dt>\n <dd>\n <span class=\"text-wrapper\">{this.formattedValue || this.value}</span>\n {this.generateEditBtn()}\n </dd>\n </dl>\n </div>\n );\n }\n return (\n <div\n class={this.wrapperClass}\n hidden={this.editing}\n >\n <div class=\"text-wrapper\">{this.formattedValue || this.value}</div>\n {this.generateEditBtn()}\n </div>\n );\n }\n\n inputChange = (e: CustomEvent) => {\n e.stopPropagation();\n };\n\n inputClick = (event: MouseEvent) => {\n event.stopPropagation();\n };\n\n inputInput = (event: Q2InputCustomEvent<IEventDetail> & InputEvent) => {\n event.stopPropagation();\n this.input.emit(event.detail);\n this.formattedValue = event.detail.formattedValue;\n this.innerValue = event.detail.value;\n };\n\n inputKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' || e.key === 'Esc') {\n e.preventDefault();\n this.cancelClick();\n return;\n }\n\n if (e.key === 'Enter') {\n e.preventDefault();\n this.saveClick();\n return;\n }\n };\n\n saveClick = (event?: MouseEvent) => {\n event && event.stopPropagation();\n const valueFromInputProp = this.hostElement.shadowRoot.querySelector('q2-input').value;\n this.defaultValue = valueFromInputProp;\n this.change.emit({\n editing: false,\n name: 'save',\n value: this.innerValue || valueFromInputProp,\n formattedValue: this.formattedValue || valueFromInputProp,\n });\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <div>\n {this.generateEditStateDOM()}\n {this.generateReadStateDOM()}\n </div>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["q2EditableFieldCss","Q2EditableFieldStyle0","Q2EditableField","this","scheduledAfterRender","cancelClick","event","stopPropagation","change","emit","editing","name","inputElement","setValue","defaultValue","editClick","inputChange","e","inputClick","inputInput","input","detail","formattedValue","innerValue","value","inputKeyDown","key","preventDefault","saveClick","valueFromInputProp","hostElement","shadowRoot","querySelector","componentWillLoad","handleAriaLabel","componentDidLoad","overrideFocus","componentDidRender","forEach","fn","onHostElementChange","isEventFromElement","onchange","queueMicrotask","hasErrors","focus","delegateFocus","inputFormatted","clickCancel","_a","cancelBtnElement","click","clickEdit","editBtnElement","clickSave","saveBtnElement","options","waitForNextPaint","ariaLabelObserver","observesEditing","newValue","oldValue","push","errorsObserver","focusedElement","activeElement","isInputFocused","tagName","Array","isArray","errors","length","hasHints","hints","locLabel","label","loc","wrapperClass","generateEditStateDOM","h","class","hidden","ref","el","hideLabel","undefined","type","disabled","formatModifier","maxlength","onInput","onChange","onKeyDown","onClick","generateReadStateDOM","persistentLabel","render"],"sources":["src/components/q2-editable-field/q2-editable-field.scss?tag=q2-editable-field&encapsulation=shadow","src/components/q2-editable-field/q2-editable-field.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n\n:host {\n display: inline-block;\n max-width: 100%;\n}\n\n.q2-editable-field-wrapper:not([hidden]) {\n display: flex;\n}\n\n.q2-editable-field-wrapper.editing {\n align-items: flex-end;\n}\n\n:host([block]) {\n display:block;\n width: 100%;\n .q2-editable-field-wrapper:not([hidden]) {\n display: grid;\n grid-template-columns: 1fr auto auto;\n }\n}\n\nq2-input,\n.text-wrapper {\n margin: 0 var(--tct-scale-2, var(--app-scale-2x, 10px)) 0 0;\n}\n\nq2-input {\n flex: 1 1 auto;\n min-width: 170px;\n}\n\n.text-wrapper {\n flex: 0 auto;\n align-self: center;\n display: inline-block;\n}\n\n:host([truncated]) .text-wrapper {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\nq2-btn {\n flex: 0 0 44px;\n}\n\ndl {\n margin: var(--tct-scale-0, var(--app-scale-0x, 0));\n}\n\ndt {\n font-weight: 600;\n}\n\ndd {\n margin-left: var(--tct-scale-0, var(--app-scale-0x, 0));\n display: flex;\n align-items: center;\n}\n","import { Component, State, Prop, h, Listen, Element, Event, EventEmitter, Method, Watch } from '@stencil/core';\nimport { IEventDetail, Q2InputCustomEvent } from 'src/components';\nimport { handleAriaLabel, isEventFromElement, loc, overrideFocus, waitForNextPaint } from 'src/utils';\nimport { Q2Input } from '../q2-input/q2-input';\nimport { IFormatterValueObject } from '../q2-input/q2-input-types';\n\n@Component({ tag: 'q2-editable-field', shadow: true, styleUrl: 'q2-editable-field.scss' })\nexport class Q2EditableField {\n // #region Own Properties\n\n cancelBtnElement: HTMLQ2BtnElement;\n defaultValue: string;\n editBtnElement: HTMLQ2BtnElement;\n innerValue: string;\n inputElement: HTMLQ2InputElement;\n saveBtnElement: HTMLQ2BtnElement;\n scheduledAfterRender: (() => void)[] = [];\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n formattedValue: string;\n\n // #endregion\n // #region Public Property API\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n /** If `true`, component expands to fill the width of its parent element. */\n @Prop({ reflect: true })\n block: boolean;\n\n /** Disables the edit button and field. */\n @Prop({ reflect: true })\n disabled: boolean;\n\n /** Controls the edit state of the element. */\n @Prop({ reflect: true, mutable: true })\n editing: boolean = false;\n\n /**\n * Determines the `errors` applied to the `q2-input` element.\n *\n * See [q2-input](https://tecton.q2developer.com/design-system/q2-input/) for more information.\n */\n @Prop()\n errors: string[];\n\n /**\n * Determines the `formatModifier` applied to the `q2-input` element.\n * @info\n * Only applicable when `type=\"currency\"`.\n *\n * See [q2-input](https://tecton.q2developer.com/design-system/q2-input/) for more information.\n */\n @Prop({ reflect: true })\n formatModifier: string;\n\n /** Hide's the field's `<label>` element from view. */\n @Prop({ reflect: true, mutable: true })\n hideLabel: boolean;\n\n /**\n * Determines the `hints` applied to the `q2-input` element.\n *\n * See [q2-input](https://tecton.q2developer.com/design-system/q2-input/) for more information.\n */\n @Prop()\n hints: string[];\n\n /**\n * The visible descriptor for the element.\n * Serves as the input label while in the edit state and as a decorative label for the read state when `persistentLabel` is `true`.\n * @localizable\n */\n @Prop({ reflect: true, mutable: true })\n label: string = '';\n\n /**\n * Determines the `maxLength` applied to the `q2-input`.\n *\n * See [q2-input](https://tecton.q2developer.com/design-system/q2-input/) for more information.\n */\n @Prop({ reflect: true })\n maxlength: number;\n\n /** Displays the provided label in the read state. */\n @Prop({ reflect: true })\n persistentLabel: boolean;\n\n /** Shortens long values with ellipses instead of splitting into multiple lines. */\n @Prop({ reflect: true })\n truncated: boolean;\n\n /**\n * Determines the `type` applied to the `q2-input` element.\n *\n * See [q2-input](https://tecton.q2developer.com/design-system/q2-input/) for all `type` values.\n */\n @Prop({ reflect: true })\n type: Q2Input['type'];\n\n /** Serves as the visible text while in the read state, and the default value of the input while in the edit state. */\n @Prop({ reflect: true, mutable: true })\n value: string = '';\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the 'Edit', 'Cancel', or 'Save' buttons are clicked.\n *\n * The event detail will not include a `value` or `formattedValue` if the event name is 'edit' or 'cancel'.\n *@info\n * If you are utilizing events to provide input validation, it is recommended you use the `input` event, not the `change` event.\n */\n @Event()\n change: EventEmitter<{\n editing: boolean;\n name: 'edit' | 'cancel' | 'save';\n value?: string;\n formattedValue?: string;\n }>;\n\n /**\n * Emitted when the user updates the `q2-input` element in the editing state.\n */\n @Event()\n input: EventEmitter<{ formattedValue: string; value: string }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n handleAriaLabel(this);\n\n this.defaultValue = this.value;\n }\n\n componentDidLoad() {\n overrideFocus(this.hostElement);\n }\n\n componentDidRender() {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('change')\n onHostElementChange(event: CustomEvent) {\n if (!isEventFromElement(event, this.hostElement) || this.hostElement.onchange) return;\n queueMicrotask(() => {\n switch (event.detail.name) {\n case 'save':\n if (this.hasErrors) {\n this.inputElement.focus();\n break;\n }\n this.value = event.detail.value;\n this.editing = event.detail.editing;\n break;\n\n case 'cancel':\n this.inputElement.value = this.value;\n this.editing = event.detail.editing;\n break;\n\n case 'edit':\n this.editing = event.detail.editing;\n break;\n }\n });\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.hostElement.shadowRoot.querySelector<HTMLElement>(this.editing ? 'q2-input' : 'q2-btn.begin-edit').focus();\n }\n\n @Listen('formatted')\n inputFormatted(event: CustomEvent<IFormatterValueObject>) {\n this.formattedValue = event.detail.formattedValue;\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * Emulates clicking the cancel button, which will hide the `<q2-input>` field.\n *\n * @testOnly\n */\n @Method()\n clickCancel() {\n if (!this.editing) return;\n this.cancelBtnElement?.click();\n }\n\n /**\n * Emulates clicking the edit button, which will display the `<q2-input>` field.\n *\n * @testOnly\n */\n @Method()\n clickEdit() {\n if (this.editing) return;\n this.editBtnElement?.click();\n }\n\n /**\n * Emulates clicking the save button, saving value in the `<q2-input>` field, and emitting a `change` event.\n *\n * @testOnly\n */\n @Method()\n clickSave() {\n if (!this.editing) return;\n this.saveBtnElement?.click();\n }\n\n /**\n * Emulates clicking the edit button, and setting the value of the `<q2-input>` field.\n *\n * If the `clickSave` argument is `true` (default), the save button will be clicked after the value is set, and a\\\n * `change` event will be emitted.\n *\n * @testOnly\n */\n @Method()\n async setValue(value: string, options: { clickSave?: boolean } = { clickSave: true }) {\n await this.clickEdit();\n await waitForNextPaint();\n\n await this.inputElement.setValue(value);\n\n if (options.clickSave) {\n await this.clickSave();\n await waitForNextPaint();\n }\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\n }\n\n @Watch('editing')\n observesEditing(newValue: boolean, oldValue: boolean) {\n if (newValue === oldValue) return;\n this.scheduledAfterRender.push(this.hostElement.focus);\n }\n\n @Watch('errors')\n errorsObserver() {\n const { editing, hasErrors } = this;\n const focusedElement = this.hostElement.shadowRoot.activeElement;\n const isInputFocused = focusedElement?.tagName === 'Q2-INPUT';\n if (isInputFocused || !focusedElement || !editing || !hasErrors) return;\n this.inputElement.focus();\n }\n\n // #endregion\n // #region Local Methods\n\n get hasErrors(): boolean {\n return Array.isArray(this.errors) && !!this.errors.length;\n }\n\n get hasHints(): boolean {\n return Array.isArray(this.hints) && !!this.hints.length;\n }\n\n get locLabel() {\n return (this.label && loc(this.label)) || '';\n }\n\n get wrapperClass() {\n return `q2-editable-field-wrapper ${this.editing ? 'editing' : ''}`;\n }\n\n cancelClick = (event?: MouseEvent) => {\n event?.stopPropagation();\n this.change.emit({ editing: false, name: 'cancel' });\n this.inputElement.setValue(this.defaultValue);\n };\n\n editClick = (event: MouseEvent) => {\n event?.stopPropagation();\n this.change.emit({ editing: true, name: 'edit' });\n };\n\n generateEditStateDOM() {\n return (\n <div\n class={this.wrapperClass}\n hidden={!this.editing}\n >\n <q2-input\n ref={el => (this.inputElement = el)}\n label={this.locLabel}\n hideLabel={this.hideLabel}\n value={this.value}\n hints={this.hasHints ? this.hints : undefined}\n errors={this.hasErrors ? this.errors : undefined}\n type={this.type}\n disabled={this.disabled}\n formatModifier={this.formatModifier}\n maxlength={this.maxlength}\n test-id=\"editableInput\"\n onInput={this.inputInput}\n onChange={this.inputChange}\n onKeyDown={this.inputKeyDown}\n onClick={this.inputClick}\n />\n <q2-btn\n ref={el => (this.cancelBtnElement = el)}\n class=\"cancel-edit\"\n label={`${loc('tecton.element.editableField.cancel')} ${this.locLabel}`}\n hide-label\n test-id=\"cancelButton\"\n onClick={this.cancelClick}\n >\n <q2-icon type=\"close\" />\n </q2-btn>\n <q2-btn\n ref={el => (this.saveBtnElement = el)}\n class=\"save-edit\"\n label={`${loc('tecton.element.editableField.save')} ${this.locLabel}`}\n hide-label\n test-id=\"saveButton\"\n onClick={this.saveClick}\n >\n <q2-icon type=\"checkmark\" />\n </q2-btn>\n </div>\n );\n }\n\n generateReadStateDOM() {\n if (this.persistentLabel && this.locLabel) {\n return (\n <div\n class={this.wrapperClass}\n hidden={this.editing}\n >\n <dl>\n <dt class=\"read-state-label\">{this.locLabel}</dt>\n <dd>\n <span class=\"text-wrapper\">{this.formattedValue || this.value}</span>\n <q2-btn\n ref={el => (this.editBtnElement = el)}\n class=\"begin-edit\"\n label={`${loc('tecton.element.editableField.edit')} ${this.locLabel}`}\n hide-label\n disabled={this.disabled}\n test-id=\"editButton\"\n onClick={this.editClick}\n >\n <q2-icon type=\"edit\" />\n </q2-btn>\n </dd>\n </dl>\n </div>\n );\n }\n return (\n <div\n class={this.wrapperClass}\n hidden={this.editing}\n >\n <div class=\"text-wrapper\">{this.formattedValue || this.value}</div>\n <q2-btn\n ref={el => (this.editBtnElement = el)}\n class=\"begin-edit\"\n label={`${loc('tecton.element.editableField.edit')} ${this.locLabel}`}\n hide-label\n disabled={this.disabled}\n test-id=\"editButton\"\n onClick={this.editClick}\n >\n <q2-icon type=\"edit\" />\n </q2-btn>\n </div>\n );\n }\n\n inputChange = (e: CustomEvent) => {\n e.stopPropagation();\n };\n\n inputClick = (event: MouseEvent) => {\n event.stopPropagation();\n };\n\n inputInput = (event: Q2InputCustomEvent<IEventDetail> & InputEvent) => {\n event.stopPropagation();\n this.input.emit(event.detail);\n this.formattedValue = event.detail.formattedValue;\n this.innerValue = event.detail.value;\n };\n\n inputKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' || e.key === 'Esc') {\n e.preventDefault();\n this.cancelClick();\n return;\n }\n\n if (e.key === 'Enter') {\n e.preventDefault();\n this.saveClick();\n return;\n }\n };\n\n saveClick = (event?: MouseEvent) => {\n event && event.stopPropagation();\n const valueFromInputProp = this.hostElement.shadowRoot.querySelector('q2-input').value;\n this.defaultValue = valueFromInputProp;\n this.change.emit({\n editing: false,\n name: 'save',\n value: this.innerValue || valueFromInputProp,\n formattedValue: this.formattedValue || valueFromInputProp,\n });\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <div>\n {this.generateEditStateDOM()}\n {this.generateReadStateDOM()}\n </div>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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"}
@@ -131,7 +131,7 @@ const d = class {
131
131
  }
132
132
  render() {
133
133
  return n(o, {
134
- key: "e4df51465f7c14e0ff4ae2463613e73cc6100318",
134
+ key: "2a8810e8b8152257cb5f710570a7b60708f76bde",
135
135
  attribute: "navigation"
136
136
  }, this.renderMenuInner());
137
137
  }