q2-tecton-elements 1.59.0 → 1.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. package/dist/bundle-report.json +583 -525
  2. package/dist/cjs/loader.cjs.js +1 -1
  3. package/dist/cjs/q2-badge.q2-btn.q2-icon.q2-input.q2-loading.q2-tab-container.q2-tab-pane.entry.cjs.js.map +1 -1
  4. package/dist/cjs/q2-badge_7.cjs.entry.js +119 -61
  5. package/dist/cjs/q2-badge_7.cjs.entry.js.map +1 -1
  6. package/dist/cjs/q2-calendar.cjs.entry.js +11 -3
  7. package/dist/cjs/q2-calendar.cjs.entry.js.map +1 -1
  8. package/dist/cjs/q2-calendar.entry.cjs.js.map +1 -1
  9. package/dist/cjs/q2-card.cjs.entry.js +1 -1
  10. package/dist/cjs/q2-card.cjs.entry.js.map +1 -1
  11. package/dist/cjs/q2-card.entry.cjs.js.map +1 -1
  12. package/dist/cjs/q2-checkbox-group.cjs.entry.js +1 -1
  13. package/dist/cjs/q2-checkbox-group.cjs.entry.js.map +1 -1
  14. package/dist/cjs/q2-checkbox-group.entry.cjs.js.map +1 -1
  15. package/dist/cjs/q2-checkbox.cjs.entry.js +3 -3
  16. package/dist/cjs/q2-checkbox.cjs.entry.js.map +1 -1
  17. package/dist/cjs/q2-checkbox.entry.cjs.js.map +1 -1
  18. package/dist/cjs/q2-context.cjs.entry.js +1 -1
  19. package/dist/cjs/q2-context.cjs.entry.js.map +1 -1
  20. package/dist/cjs/q2-context.entry.cjs.js.map +1 -1
  21. package/dist/cjs/q2-data-table.cjs.entry.js +3 -3
  22. package/dist/cjs/q2-data-table.cjs.entry.js.map +1 -1
  23. package/dist/cjs/q2-data-table.entry.cjs.js.map +1 -1
  24. package/dist/cjs/q2-dropdown.cjs.entry.js +5 -3
  25. package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
  26. package/dist/cjs/q2-dropdown.entry.cjs.js.map +1 -1
  27. package/dist/cjs/q2-file-picker.cjs.entry.js +1 -1
  28. package/dist/cjs/q2-file-picker.cjs.entry.js.map +1 -1
  29. package/dist/cjs/q2-file-picker.entry.cjs.js.map +1 -1
  30. package/dist/cjs/q2-form.cjs.entry.js +4 -4
  31. package/dist/cjs/q2-form.cjs.entry.js.map +1 -1
  32. package/dist/cjs/q2-form.entry.cjs.js.map +1 -1
  33. package/dist/cjs/q2-item.cjs.entry.js +1 -1
  34. package/dist/cjs/q2-item.cjs.entry.js.map +1 -1
  35. package/dist/cjs/q2-item.entry.cjs.js.map +1 -1
  36. package/dist/cjs/q2-loading-element.cjs.entry.js +1 -1
  37. package/dist/cjs/q2-optgroup.cjs.entry.js +1 -1
  38. package/dist/cjs/q2-optgroup.cjs.entry.js.map +1 -1
  39. package/dist/cjs/q2-optgroup.entry.cjs.js.map +1 -1
  40. package/dist/cjs/q2-option-list.q2-popover.entry.cjs.js.map +1 -1
  41. package/dist/cjs/q2-option-list_2.cjs.entry.js +1 -1
  42. package/dist/cjs/q2-option-list_2.cjs.entry.js.map +1 -1
  43. package/dist/cjs/q2-pill.cjs.entry.js +11 -9
  44. package/dist/cjs/q2-pill.cjs.entry.js.map +1 -1
  45. package/dist/cjs/q2-pill.entry.cjs.js.map +1 -1
  46. package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
  47. package/dist/cjs/q2-radio-group.cjs.entry.js.map +1 -1
  48. package/dist/cjs/q2-radio-group.entry.cjs.js.map +1 -1
  49. package/dist/cjs/q2-radio.cjs.entry.js +1 -1
  50. package/dist/cjs/q2-radio.cjs.entry.js.map +1 -1
  51. package/dist/cjs/q2-radio.entry.cjs.js.map +1 -1
  52. package/dist/cjs/q2-select.cjs.entry.js +9 -4
  53. package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
  54. package/dist/cjs/q2-select.entry.cjs.js.map +1 -1
  55. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +1 -1
  56. package/dist/cjs/q2-stepper-vertical.cjs.entry.js.map +1 -1
  57. package/dist/cjs/q2-stepper-vertical.entry.cjs.js.map +1 -1
  58. package/dist/cjs/q2-stepper.cjs.entry.js +1 -1
  59. package/dist/cjs/q2-stepper.cjs.entry.js.map +1 -1
  60. package/dist/cjs/q2-stepper.entry.cjs.js.map +1 -1
  61. package/dist/cjs/q2-tag.cjs.entry.js +1 -1
  62. package/dist/cjs/q2-tag.cjs.entry.js.map +1 -1
  63. package/dist/cjs/q2-tag.entry.cjs.js.map +1 -1
  64. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  65. package/dist/cjs/q2-textarea.cjs.entry.js +1 -1
  66. package/dist/cjs/q2-textarea.cjs.entry.js.map +1 -1
  67. package/dist/cjs/q2-textarea.entry.cjs.js.map +1 -1
  68. package/dist/cjs/{shapes-CUFxQAvI.js → shapes-CmBHp0YP.js} +10 -4
  69. package/dist/cjs/shapes-CmBHp0YP.js.map +1 -0
  70. package/dist/collection/components/q2-btn/q2-btn.css +71 -33
  71. package/dist/collection/components/q2-calendar/q2-calendar.js +11 -3
  72. package/dist/collection/components/q2-calendar/q2-calendar.js.map +1 -1
  73. package/dist/collection/components/q2-card/q2-card.css +8 -6
  74. package/dist/collection/components/q2-checkbox/q2-checkbox.css +24 -10
  75. package/dist/collection/components/q2-checkbox/q2-checkbox.js +2 -2
  76. package/dist/collection/components/q2-checkbox/q2-checkbox.js.map +1 -1
  77. package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.css +8 -2
  78. package/dist/collection/components/q2-context/q2-context.css +7 -71
  79. package/dist/collection/components/q2-data-table/q2-data-table.css +3 -2
  80. package/dist/collection/components/q2-data-table/q2-data-table.js +9 -9
  81. package/dist/collection/components/q2-data-table/q2-data-table.js.map +1 -1
  82. package/dist/collection/components/q2-dropdown/q2-dropdown.js +5 -3
  83. package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
  84. package/dist/collection/components/q2-file-picker/q2-file-picker.css +1 -1
  85. package/dist/collection/components/q2-file-picker/q2-file-picker.js +3 -3
  86. package/dist/collection/components/q2-form/q2-form.js +2 -2
  87. package/dist/collection/components/q2-form/q2-form.js.map +1 -1
  88. package/dist/collection/components/q2-grid/q2-grid.js +30 -30
  89. package/dist/collection/components/q2-grid-area/q2-grid-area.js +42 -42
  90. package/dist/collection/components/q2-icon/q2-icon.css +5 -0
  91. package/dist/collection/components/q2-input/q2-input.css +13 -4
  92. package/dist/collection/components/q2-input/q2-input.js +18 -8
  93. package/dist/collection/components/q2-input/q2-input.js.map +1 -1
  94. package/dist/collection/components/q2-item/q2-item.css +5 -2
  95. package/dist/collection/components/q2-loading/q2-loading.js +90 -33
  96. package/dist/collection/components/q2-loading/q2-loading.js.map +1 -1
  97. package/dist/collection/components/q2-loading/skeleton/shapes.js +8 -2
  98. package/dist/collection/components/q2-loading/skeleton/shapes.js.map +1 -1
  99. package/dist/collection/components/q2-optgroup/q2-optgroup.js +3 -3
  100. package/dist/collection/components/q2-optgroup/q2-optgroup.js.map +1 -1
  101. package/dist/collection/components/q2-option-list/q2-option-list.js +4 -4
  102. package/dist/collection/components/q2-pill/q2-pill.css +23 -7
  103. package/dist/collection/components/q2-pill/q2-pill.js +11 -7
  104. package/dist/collection/components/q2-pill/q2-pill.js.map +1 -1
  105. package/dist/collection/components/q2-popover/q2-popover.css +1 -0
  106. package/dist/collection/components/q2-radio/q2-radio.css +5 -3
  107. package/dist/collection/components/q2-radio-group/q2-radio-group.css +5 -0
  108. package/dist/collection/components/q2-select/q2-select.js +9 -4
  109. package/dist/collection/components/q2-select/q2-select.js.map +1 -1
  110. package/dist/collection/components/q2-stepper/q2-stepper.css +16 -4
  111. package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js +2 -2
  112. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.css +2 -0
  113. package/dist/collection/components/q2-tab-container/q2-tab-container.css +4 -2
  114. package/dist/collection/components/q2-tab-container/q2-tab-container.js +27 -19
  115. package/dist/collection/components/q2-tab-container/q2-tab-container.js.map +1 -1
  116. package/dist/collection/components/q2-tag/q2-tag.css +7 -0
  117. package/dist/collection/components/q2-textarea/q2-textarea.css +13 -3
  118. package/dist/components/q2-btn2.js +1 -1
  119. package/dist/components/q2-btn2.js.map +1 -1
  120. package/dist/components/q2-calendar.js +11 -3
  121. package/dist/components/q2-calendar.js.map +1 -1
  122. package/dist/components/q2-card.js +1 -1
  123. package/dist/components/q2-card.js.map +1 -1
  124. package/dist/components/q2-checkbox-group.js +1 -1
  125. package/dist/components/q2-checkbox-group.js.map +1 -1
  126. package/dist/components/q2-checkbox2.js +3 -3
  127. package/dist/components/q2-checkbox2.js.map +1 -1
  128. package/dist/components/q2-context.js +1 -1
  129. package/dist/components/q2-context.js.map +1 -1
  130. package/dist/components/q2-data-table.js +3 -3
  131. package/dist/components/q2-data-table.js.map +1 -1
  132. package/dist/components/q2-dropdown.js +5 -3
  133. package/dist/components/q2-dropdown.js.map +1 -1
  134. package/dist/components/q2-file-picker.js +1 -1
  135. package/dist/components/q2-file-picker.js.map +1 -1
  136. package/dist/components/q2-form.js +4 -4
  137. package/dist/components/q2-form.js.map +1 -1
  138. package/dist/components/q2-icon2.js +1 -1
  139. package/dist/components/q2-icon2.js.map +1 -1
  140. package/dist/components/q2-input2.js +18 -8
  141. package/dist/components/q2-input2.js.map +1 -1
  142. package/dist/components/q2-item2.js +1 -1
  143. package/dist/components/q2-item2.js.map +1 -1
  144. package/dist/components/q2-loading2.js +71 -32
  145. package/dist/components/q2-loading2.js.map +1 -1
  146. package/dist/components/q2-optgroup2.js +1 -1
  147. package/dist/components/q2-optgroup2.js.map +1 -1
  148. package/dist/components/q2-pill.js +13 -10
  149. package/dist/components/q2-pill.js.map +1 -1
  150. package/dist/components/q2-popover2.js +1 -1
  151. package/dist/components/q2-popover2.js.map +1 -1
  152. package/dist/components/q2-radio-group.js +1 -1
  153. package/dist/components/q2-radio-group.js.map +1 -1
  154. package/dist/components/q2-radio.js +1 -1
  155. package/dist/components/q2-radio.js.map +1 -1
  156. package/dist/components/q2-select2.js +9 -4
  157. package/dist/components/q2-select2.js.map +1 -1
  158. package/dist/components/q2-stepper-vertical.js +1 -1
  159. package/dist/components/q2-stepper-vertical.js.map +1 -1
  160. package/dist/components/q2-stepper.js +1 -1
  161. package/dist/components/q2-stepper.js.map +1 -1
  162. package/dist/components/q2-tab-container.js +28 -20
  163. package/dist/components/q2-tab-container.js.map +1 -1
  164. package/dist/components/q2-tag.js +1 -1
  165. package/dist/components/q2-tag.js.map +1 -1
  166. package/dist/components/q2-textarea.js +1 -1
  167. package/dist/components/q2-textarea.js.map +1 -1
  168. package/dist/components/shapes.js +8 -2
  169. package/dist/components/shapes.js.map +1 -1
  170. package/dist/esm/loader.js +1 -1
  171. package/dist/esm/q2-badge.q2-btn.q2-icon.q2-input.q2-loading.q2-tab-container.q2-tab-pane.entry.js.map +1 -1
  172. package/dist/esm/q2-badge_7.entry.js +119 -61
  173. package/dist/esm/q2-badge_7.entry.js.map +1 -1
  174. package/dist/esm/q2-calendar.entry.js +11 -3
  175. package/dist/esm/q2-calendar.entry.js.map +1 -1
  176. package/dist/esm/q2-card.entry.js +1 -1
  177. package/dist/esm/q2-card.entry.js.map +1 -1
  178. package/dist/esm/q2-checkbox-group.entry.js +1 -1
  179. package/dist/esm/q2-checkbox-group.entry.js.map +1 -1
  180. package/dist/esm/q2-checkbox.entry.js +3 -3
  181. package/dist/esm/q2-checkbox.entry.js.map +1 -1
  182. package/dist/esm/q2-context.entry.js +1 -1
  183. package/dist/esm/q2-context.entry.js.map +1 -1
  184. package/dist/esm/q2-data-table.entry.js +3 -3
  185. package/dist/esm/q2-data-table.entry.js.map +1 -1
  186. package/dist/esm/q2-dropdown.entry.js +5 -3
  187. package/dist/esm/q2-dropdown.entry.js.map +1 -1
  188. package/dist/esm/q2-file-picker.entry.js +1 -1
  189. package/dist/esm/q2-file-picker.entry.js.map +1 -1
  190. package/dist/esm/q2-form.entry.js +4 -4
  191. package/dist/esm/q2-form.entry.js.map +1 -1
  192. package/dist/esm/q2-item.entry.js +1 -1
  193. package/dist/esm/q2-item.entry.js.map +1 -1
  194. package/dist/esm/q2-loading-element.entry.js +1 -1
  195. package/dist/esm/q2-optgroup.entry.js +1 -1
  196. package/dist/esm/q2-optgroup.entry.js.map +1 -1
  197. package/dist/esm/q2-option-list.q2-popover.entry.js.map +1 -1
  198. package/dist/esm/q2-option-list_2.entry.js +1 -1
  199. package/dist/esm/q2-option-list_2.entry.js.map +1 -1
  200. package/dist/esm/q2-pill.entry.js +11 -9
  201. package/dist/esm/q2-pill.entry.js.map +1 -1
  202. package/dist/esm/q2-radio-group.entry.js +1 -1
  203. package/dist/esm/q2-radio-group.entry.js.map +1 -1
  204. package/dist/esm/q2-radio.entry.js +1 -1
  205. package/dist/esm/q2-radio.entry.js.map +1 -1
  206. package/dist/esm/q2-select.entry.js +9 -4
  207. package/dist/esm/q2-select.entry.js.map +1 -1
  208. package/dist/esm/q2-stepper-vertical.entry.js +1 -1
  209. package/dist/esm/q2-stepper-vertical.entry.js.map +1 -1
  210. package/dist/esm/q2-stepper.entry.js +1 -1
  211. package/dist/esm/q2-stepper.entry.js.map +1 -1
  212. package/dist/esm/q2-tag.entry.js +1 -1
  213. package/dist/esm/q2-tag.entry.js.map +1 -1
  214. package/dist/esm/q2-tecton-elements.js +1 -1
  215. package/dist/esm/q2-textarea.entry.js +1 -1
  216. package/dist/esm/q2-textarea.entry.js.map +1 -1
  217. package/dist/esm/{shapes-BrIjALih.js → shapes-ElQYMSyu.js} +10 -4
  218. package/dist/esm/shapes-ElQYMSyu.js.map +1 -0
  219. package/dist/jest.setup.js +33 -0
  220. package/dist/jest.setup.js.map +1 -1
  221. package/dist/q2-tecton-elements/q2-badge.q2-btn.q2-icon.q2-input.q2-loading.q2-tab-container.q2-tab-pane.entry.esm.js.map +1 -1
  222. package/dist/q2-tecton-elements/q2-badge_7.entry.js +204 -146
  223. package/dist/q2-tecton-elements/q2-badge_7.entry.js.map +1 -1
  224. package/dist/q2-tecton-elements/q2-calendar.entry.esm.js.map +1 -1
  225. package/dist/q2-tecton-elements/q2-calendar.entry.js +104 -97
  226. package/dist/q2-tecton-elements/q2-calendar.entry.js.map +1 -1
  227. package/dist/q2-tecton-elements/q2-card.entry.esm.js.map +1 -1
  228. package/dist/q2-tecton-elements/q2-card.entry.js +44 -44
  229. package/dist/q2-tecton-elements/q2-card.entry.js.map +1 -1
  230. package/dist/q2-tecton-elements/q2-checkbox-group.entry.esm.js.map +1 -1
  231. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +5 -5
  232. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js.map +1 -1
  233. package/dist/q2-tecton-elements/q2-checkbox.entry.esm.js.map +1 -1
  234. package/dist/q2-tecton-elements/q2-checkbox.entry.js +28 -23
  235. package/dist/q2-tecton-elements/q2-checkbox.entry.js.map +1 -1
  236. package/dist/q2-tecton-elements/q2-context.entry.esm.js.map +1 -1
  237. package/dist/q2-tecton-elements/q2-context.entry.js +1 -1
  238. package/dist/q2-tecton-elements/q2-context.entry.js.map +1 -1
  239. package/dist/q2-tecton-elements/q2-data-table.entry.esm.js.map +1 -1
  240. package/dist/q2-tecton-elements/q2-data-table.entry.js +27 -27
  241. package/dist/q2-tecton-elements/q2-data-table.entry.js.map +1 -1
  242. package/dist/q2-tecton-elements/q2-dropdown.entry.esm.js.map +1 -1
  243. package/dist/q2-tecton-elements/q2-dropdown.entry.js +18 -17
  244. package/dist/q2-tecton-elements/q2-dropdown.entry.js.map +1 -1
  245. package/dist/q2-tecton-elements/q2-file-picker.entry.esm.js.map +1 -1
  246. package/dist/q2-tecton-elements/q2-file-picker.entry.js +1 -1
  247. package/dist/q2-tecton-elements/q2-file-picker.entry.js.map +1 -1
  248. package/dist/q2-tecton-elements/q2-form.entry.esm.js.map +1 -1
  249. package/dist/q2-tecton-elements/q2-form.entry.js +2 -2
  250. package/dist/q2-tecton-elements/q2-form.entry.js.map +1 -1
  251. package/dist/q2-tecton-elements/q2-item.entry.esm.js.map +1 -1
  252. package/dist/q2-tecton-elements/q2-item.entry.js +8 -8
  253. package/dist/q2-tecton-elements/q2-loading-element.entry.js +1 -1
  254. package/dist/q2-tecton-elements/q2-optgroup.entry.esm.js.map +1 -1
  255. package/dist/q2-tecton-elements/q2-optgroup.entry.js +1 -1
  256. package/dist/q2-tecton-elements/q2-optgroup.entry.js.map +1 -1
  257. package/dist/q2-tecton-elements/q2-option-list.q2-popover.entry.esm.js.map +1 -1
  258. package/dist/q2-tecton-elements/q2-option-list_2.entry.js +1 -1
  259. package/dist/q2-tecton-elements/q2-option-list_2.entry.js.map +1 -1
  260. package/dist/q2-tecton-elements/q2-pill.entry.esm.js.map +1 -1
  261. package/dist/q2-tecton-elements/q2-pill.entry.js +39 -37
  262. package/dist/q2-tecton-elements/q2-pill.entry.js.map +1 -1
  263. package/dist/q2-tecton-elements/q2-radio-group.entry.esm.js.map +1 -1
  264. package/dist/q2-tecton-elements/q2-radio-group.entry.js +47 -47
  265. package/dist/q2-tecton-elements/q2-radio-group.entry.js.map +1 -1
  266. package/dist/q2-tecton-elements/q2-radio.entry.esm.js.map +1 -1
  267. package/dist/q2-tecton-elements/q2-radio.entry.js +16 -16
  268. package/dist/q2-tecton-elements/q2-radio.entry.js.map +1 -1
  269. package/dist/q2-tecton-elements/q2-select.entry.esm.js.map +1 -1
  270. package/dist/q2-tecton-elements/q2-select.entry.js +13 -9
  271. package/dist/q2-tecton-elements/q2-select.entry.js.map +1 -1
  272. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.esm.js.map +1 -1
  273. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +1 -1
  274. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js.map +1 -1
  275. package/dist/q2-tecton-elements/q2-stepper.entry.esm.js.map +1 -1
  276. package/dist/q2-tecton-elements/q2-stepper.entry.js +39 -39
  277. package/dist/q2-tecton-elements/q2-stepper.entry.js.map +1 -1
  278. package/dist/q2-tecton-elements/q2-tag.entry.esm.js.map +1 -1
  279. package/dist/q2-tecton-elements/q2-tag.entry.js +38 -38
  280. package/dist/q2-tecton-elements/q2-tag.entry.js.map +1 -1
  281. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  282. package/dist/q2-tecton-elements/q2-textarea.entry.esm.js.map +1 -1
  283. package/dist/q2-tecton-elements/q2-textarea.entry.js +17 -17
  284. package/dist/q2-tecton-elements/q2-textarea.entry.js.map +1 -1
  285. package/dist/q2-tecton-elements/{shapes-BrIjALih.js → shapes-ElQYMSyu.js} +40 -39
  286. package/dist/q2-tecton-elements/shapes-ElQYMSyu.js.map +1 -0
  287. package/dist/types/components/q2-form/q2-form.d.ts +1 -1
  288. package/dist/types/components/q2-input/q2-input.d.ts +2 -0
  289. package/dist/types/components/q2-loading/q2-loading.d.ts +17 -6
  290. package/dist/types/components/q2-optgroup/q2-optgroup.d.ts +2 -2
  291. package/dist/types/components/q2-pill/q2-pill.d.ts +1 -1
  292. package/dist/types/components/q2-select/q2-select.d.ts +6 -1
  293. package/dist/types/components/q2-tab-container/q2-tab-container.d.ts +4 -2
  294. package/dist/types/components.d.ts +14 -4
  295. package/package.json +4 -3
  296. package/dist/cjs/shapes-CUFxQAvI.js.map +0 -1
  297. package/dist/esm/shapes-BrIjALih.js.map +0 -1
  298. package/dist/q2-tecton-elements/shapes-BrIjALih.js.map +0 -1
  299. /package/dist/types/{builds → home/gitlab-runner/builds}/q2e/development/tecton/tecton/packages/q2-tecton-elements/.stencil/jest.setup.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"names":["q2TextareaCss","Q2Textarea","constructor","hostRef","this","debouncedScreenReaderCharacterCount","debounce","updateScreenReaderCharacterCount","describeByScreenReaderCharacterCount","guid","createGuid","scheduledAfterRender","resize","checkCols","contentContainer","cols","textareaField","includes","style","width","offsetWidth","removeAttribute","checkRows","rows","height","offsetHeight","getBorderOffset","computedStyle","window","getComputedStyle","parseInt","borderTopWidth","borderBottomWidth","increaseHeightIfOverflowing","scrollHeight","isOverflowingVertically","newHeight","clientHeight","onMouseDown","event","downParams","x","clientX","y","clientY","document","addEventListener","onMouseMove","onMouseUp","setHeight","setWidth","removeEventListener","onTextareaBlur","valueOnFocus","value","hasFocus","setMessageHeight","change","emit","onTextareaChange","stopPropagation","target","onTextareaFocus","onTextareaInput","maxlength","input","onTouchMove","onTouchStart","touches","length","preventDefault","firstTouch","pageX","pageY","screenReaderCharacterCount","_a","componentWillLoad","isNaN","undefined","componentDidLoad","overrideFocus","hostElement","componentDidRender","push","forEach","fn","onHostElementChange","onchange","detail","onHostElementFocus","isEventFromElement","focus","onHostElementInput","oninput","setValue","dispatchEvent","InputEvent","colsObserver","errorsObserver","hintsObserver","maxlengthObserver","rowsObserver","valueObserver","truncatedValue","substr","hasError","Array","isArray","errors","inputDescribedBy","describedBy","showMessages","inputId","messages","hints","hideMessages","showResize","wrapperClasses","errorClass","valueClass","focusClass","resizeY","eventY","MouseEvent","_b","resizeX","eventX","newWidth","renderInput","textareaClasses","h","class","id","placeholder","loc","maxLength","optional","hideLabel","label","spellcheck","ref","el","readonly","disabled","onInput","onChange","onFocus","onBlur","type","tabIndex","viewBox","xmlns","d","fill","renderMaxLength","Fragment","render","key","renderLabel","renderMessages"],"sources":["src/components/q2-textarea/q2-textarea.scss?tag=q2-textarea&encapsulation=shadow","src/components/q2-textarea/q2-textarea.tsx"],"sourcesContent":["@import '../../styles/host';\n@import '../../styles/functions';\n\n:host {\n --comp-default-textarea-margin: #{var-list(var-prefixer(textarea-margin-top), --app-scale-5x, 25px) 0\n var-list(var-prefixer(textarea-margin-bottom), --app-scale-5x, 25px)};\n display: block;\n margin: var-list(--tct-textarea-margin, --comp-default-textarea-margin);\n font-size: var-list(var-prefixer(textarea-font-size), --app-font-size, inherit);\n}\n\n:host([hidden]) {\n display: none;\n}\n\nlabel {\n --comp-label-padding: #{var-list(\n --tct-textarea-label-padding,\n unquote(\n '0 #{var-list(var-prefixer(textarea-label-padding-right), 0)} 0 #{var-list(var-prefixer(textarea-label-padding-left), 0)}'\n )\n )};\n --comp-label-margin: #{var-list(\n --tct-textarea-label-margin,\n unquote(\n '#{var-list(var-prefixer(textarea-label-margin-top), 0)} 0 #{var-list(var-prefixer(textarea-label-margin-bottom), --tct-scale-1x, --app-scale-1x, 5px)}'\n )\n )};\n display: block;\n padding: var(--comp-label-padding);\n margin: var(--comp-label-margin);\n color: var-list(var-prefixer(textarea-label-font-color), inherit);\n font-size: var-list(var-prefixer(textarea-label-font-size), inherit);\n font-weight: var-list(var-prefixer(textarea-label-font-weight), 600);\n text-transform: var-list(var-prefixer(textarea-label-text-transform), none);\n letter-spacing: var-list(var-prefixer(textarea-label-letter-spacing), inherit);\n transition: color var-list(var-prefixer(textarea-tween), --tct-tween-2, --app-tween-2, unquote('0.4s ease'));\n\n .has-error & {\n color: var-list(var-prefixer(textarea-error-label-font-color), --tct-textarea-label-font-color, inherit);\n }\n\n :hover & {\n color: var-list(--tct-textarea-hover-label-font-color, var-prefixer(textarea-label-font-color), inherit);\n .has-error & {\n color: var-list(\n --tct-textarea-error-hover-label-font-color,\n var-prefixer(textarea-error-label-font-color),\n --tct-textarea-hover-label-font-color,\n --tct-textarea-label-font-color,\n inherit\n );\n }\n }\n\n :host(:focus-within) & {\n color: var-list(--tct-textarea-focus-label-font-color, var-prefixer(textarea-label-font-color), inherit);\n }\n\n :host(:focus-within) .has-error & {\n color: var-list(\n --tct-textarea-error-focus-label-font-color,\n var-prefixer(textarea-error-label-font-color),\n --tct-textarea-focus-label-font-color,\n var-prefixer(textarea-label-font-color),\n inherit\n );\n }\n}\n\n.optional-tag {\n --comp-label-optional-margin: #{var-list(\n --tct-textarea-label-optional-margin,\n unquote(\n '0 0 0 #{var-list(var-prefixer(textarea-label-optional-margin-left), --tct-scale-1x, --app-scale-1x, 5px)}'\n )\n )};\n margin: var(--comp-label-optional-margin);\n color: var-list(\n var-prefixer(textarea-label-optional-font-color),\n --t-textA,\n --t-a11y-gray-color,\n rgba(77, 77, 77, 0.77)\n );\n font-size: var-list(var-prefixer(textarea-label-optional-font-size), 12px);\n font-weight: var-list(var-prefixer(textarea-label-optional-font-weight), 400);\n}\n\n.input-container {\n min-height: var-list(var-prefixer(textarea-min-height), --comp-textarea-min-height);\n height: 100%;\n --comp-default-border-radius: #{var-list(--tct-border-radius-1, --app-border-radius-1, 4px)};\n --comp-textarea-border-top-left-radius: #{var-list(\n var-prefixer(textarea-border-top-left-radius),\n --comp-default-border-radius\n )};\n --comp-textarea-border-top-right-radius: #{var-list(\n var-prefixer(textarea-border-top-right-radius),\n --comp-default-border-radius\n )};\n --comp-textarea-border-bottom-right-radius: #{var-list(\n var-prefixer(textarea-border-bottom-right-radius),\n --comp-default-border-radius\n )};\n --comp-textarea-border-bottom-left-radius: #{var-list(\n var-prefixer(textarea-border-bottom-left-radius),\n --comp-default-border-radius\n )};\n --comp-textarea-border-radius: var(--comp-textarea-border-top-left-radius)\n var(--comp-textarea-border-top-right-radius) var(--comp-textarea-border-bottom-right-radius)\n var(--comp-textarea-border-bottom-left-radius);\n --comp-textarea-border-width: #{var-list(var-prefixer(textarea-border-top-width), 1px)\n var-list(var-prefixer(textarea-border-right-width), 1px)\n var-list(var-prefixer(textarea-border-bottom-width), 1px)\n var-list(var-prefixer(textarea-border-left-width), 1px)};\n --comp-textarea-icon-clearance: 34px;\n\n :host([disabled]) & {\n cursor: not-allowed;\n opacity: var-list(var-prefixer(textarea-disabled-opacity), --tct-disabled-opacity, --app-disabled-opacity, 0.4);\n }\n}\n\n.content-container {\n --comp-textarea-min-height: 46px;\n --comp-textarea-min-width: 150px;\n position: relative;\n display: inline-block;\n min-height: var-list(var-prefixer(textarea-min-height), --comp-textarea-min-height);\n min-width: var-list(var-prefixer(textarea-min-width) --comp-textarea-min-width);\n\n :host(:not([cols])) & {\n width: 100%;\n }\n}\n\ntextarea {\n --comp-textarea-padding: #{var-list(\n --tct-textarea-padding,\n unquote(\n '#{var-list(var-prefixer(textarea-vertical-padding), --tct-scale-2x, --app-scale-2x, 10px)} #{var-list(var-prefixer(textarea-horizontal-padding), --tct-scale-2x, --app-scale-2x, 10px)}'\n )\n )};\n --comp-textarea-border-color: #{var-list(\n var-prefixer(textarea-border-color),\n var-prefixer(input-border-color),\n --t-a11y-gray-color-AA,\n #949494\n )};\n --comp-textarea-background: #{var-list(\n --tct-textarea-background,\n var-prefixer(textarea-bg),\n --tct-input-background,\n var-prefixer(input-bg),\n --t-gray-14,\n #fcfcfd\n )};\n --comp-textarea-hover-ring-color: var(--tct-textarea-hover-ring-color);\n --comp-textarea-hover-ring: #{0 0 0 2px var(--t-base), 0 0 0 4px var(--comp-textarea-hover-ring-color),\n var-list(--tct-textarea-hover-box-shadow, unquote('0 0 transparent'))};\n\n resize: none;\n height: 100%;\n -webkit-appearance: none;\n appearance: none;\n display: block;\n box-sizing: border-box;\n min-height: var-list(var-prefixer(textarea-min-height), --comp-textarea-min-height);\n padding: var(--comp-textarea-padding);\n background: var(--comp-textarea-background);\n color: var-list(var-prefixer(textarea-font-color), --t-input-font-color, inherit);\n border-width: var(--comp-textarea-border-width);\n border-style: solid;\n border-color: var(--comp-textarea-border-color);\n border-radius: var(--comp-textarea-border-radius);\n box-shadow: var-list(var-prefixer(textarea-box-shadow), none);\n scrollbar-width: thin;\n scrollbar-color: var(--t-a11y-gray-color) transparent;\n --comp-textarea-tween: #{var-list(var-prefixer(textarea-tween), --tct-tween-2, --app-tween-2, unquote('0.4s ease'))};\n transition:\n border-width var(--comp-textarea-tween),\n border-color var(--comp-textarea-tween),\n box-shadow var(--comp-textarea-tween);\n\n &::-webkit-scrollbar {\n width: var(--app-scale-1x);\n height: var(--app-scale-1x);\n margin: var(--app-scale-1x);\n }\n\n &::-webkit-scrollbar-thumb {\n background: var(--t-a11y-gray-color);\n border-radius: 2px;\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n &:not([cols]) {\n width: 100%;\n }\n\n .has-error & {\n padding-right: var(--comp-textarea-icon-clearance);\n border-color: var-list(var-prefixer(textarea-error-border-color), --const-stoplight-alert, #d20a0a);\n background: var-list(--tct-textarea-error-background, --comp-textarea-background);\n }\n\n &:hover {\n border-color: var-list(--tct-textarea-hover-border-color, --comp-textarea-border-color);\n background: var-list(--tct-textarea-hover-background, --comp-textarea-background);\n box-shadow: var-list(--tct-textarea-hover-box-shadow, --comp-textarea-hover-ring);\n\n .has-error & {\n border-color: var-list(\n --tct-textarea-error-hover-border-color,\n var-prefixer(textarea-error-border-color),\n --const-stoplight-alert,\n #d20a0a\n );\n background: var-list(\n --tct-textarea-error-hover-background,\n --tct-textarea-error-background,\n --comp-textarea-background\n );\n box-shadow: var-list(\n --tct-textarea-error-hover-box-shadow,\n --tct-textarea-error-box-shadow,\n --tct-textarea-hover-box-shadow,\n --comp-textarea-hover-ring\n );\n }\n }\n\n &:focus {\n border-color: var-list(--tct-textarea-focus-border-color, --comp-textarea-border-color);\n background: var-list(--tct-textarea-focus-background, --comp-textarea-background);\n\n .has-error & {\n border-color: var-list(\n --tct-textarea-error-focus-border-color,\n --tct-textarea-error-border-color,\n --const-stoplight-alert,\n #d20a0a\n );\n background: var-list(\n --tct-textarea-error-focus-background,\n --tct-textarea-error-background,\n --tct-textarea-focus-background,\n --comp-textarea-background\n );\n box-shadow: var-list(\n --tct-textarea-error-focus-box-shadow,\n --tct-textarea-error-box-shadow,\n --tct-textarea-focus-box-shadow,\n --const-double-focus-ring\n );\n }\n }\n &:focus-visible {\n box-shadow: var-list(--tct-textarea-focus-box-shadow, --const-double-focus-ring);\n }\n\n &::placeholder {\n color: var-list(\n var-prefixer(textarea-placeholder-font-color),\n --t-input-placeholder-font-color,\n --tct-gray-7,\n --app-gray-7,\n --tct-gray-d1,\n --app-gray-d1,\n #666666\n );\n }\n\n &[disabled] {\n cursor: not-allowed;\n }\n\n &.resize-vertical-auto {\n overflow: hidden;\n }\n\n .has-error & {\n padding-right: var(--comp-textarea-icon-clearance);\n\n &:not(:focus) {\n border-color: var-list(var-prefixer(textarea-error-border-color), --const-stoplight-alert, #d20a0a);\n }\n }\n}\n\nq2-icon {\n margin-top: calc(#{var-list(var-prefixer(textarea-border-top-width), 1px)} / 2);\n margin-bottom: calc(#{var-list(var-prefixer(textarea-border-bottom-width), 1px)} / 2);\n pointer-events: none;\n position: absolute;\n top: var-list(var-prefixer(textarea-vertical-padding), --tct-scale-2x, --app-scale-2x, 10px);\n color: var-list(var-prefixer(textarea-icon-stroke-primary), --app-gray-9, --tct-gray, --app-gray, #999999);\n right: 0;\n margin-right: var-list(--tct-scale-2x, --app-scale-2x, 10px);\n --tct-icon-stroke-primary: #{var-list(\n var-prefixer(textarea-icon-stroke-primary),\n var-prefixer(gray-9),\n --tct-gray,\n --app-gray,\n #999999\n )};\n --t-icon-stroke-primary: #{var-list(\n var-prefixer(textarea-icon-stroke-primary),\n var-prefixer(gray-9),\n --tct-gray,\n --app-gray,\n #999999\n )};\n}\n\n.icon-error {\n color: var-list(--tct-stoplight-error, --const-stoplight-alert, #d20a0a);\n --tct-icon-stroke-primary: #{var-list(--tct-stoplight-error, --const-stoplight-alert, #d20a0a)};\n --t-icon-stroke-primary: #{var-list(--tct-stoplight-error, --const-stoplight-alert, #d20a0a)};\n}\n\n.messages-container {\n height: 0px;\n overflow: hidden;\n background: var-list(\n --tct-message-background,\n --tct-message-bg,\n var-prefixer(gray-14),\n --tct-gray-l3,\n --app-gray-l3,\n #f2f2f2\n );\n box-shadow: var-list(\n var-prefixer(textarea-message-box-shadow),\n --tct-box-shadow-1,\n --app-shadow-1,\n unquote(\"0px 0px 2px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.14)\")\n );\n transition: height\n var-list(var-prefixer(textarea-messages-tween), --tct-tween-1, --app-tween-1, unquote('0.2s ease'));\n margin-top: 2px;\n z-index: 1;\n position: absolute;\n width: 100%;\n color: var-list(var-prefixer(textarea-messages-font-color), inherit);\n}\n\n.max-length {\n color: var-list(var-prefixer(textarea-max-length-color), --t-textA, rgba(77, 77, 77, 0.77));\n font-size: var-list(\n var-prefixer(textarea-max-length-font-size),\n --tct-font-size-small,\n --app-font-size-small,\n 12px\n );\n position: absolute;\n right: 0;\n}\n\n.btn-resize {\n --tct-textarea-resize-icon-padding: calc(\n calc(\n #{var-list(var-prefixer(textarea-resize-btn-width), --tct-btn-icon-width, 44px)} - #{var-list(\n var-prefixer(textarea-resize-icon-size),\n 12px\n )}\n ) / 2\n );\n width: var-list(var-prefixer(textarea-resize-btn-width), --tct-btn-icon-width, 44px);\n height: var-list(var-prefixer(textarea-resize-btn-height), --tct-btn-icon-height, 44px);\n background: var-list(var-prefixer(textarea-resize-btn-background), transparent);\n stroke: var-list(var-prefixer(textarea-resize-color), --t-textA, rgba(77, 77, 77, 0.77));\n border: 0;\n position: absolute;\n right: calc(#{var-list(var-prefixer(textarea-resize-icon-padding))} * -1 + 2px);\n bottom: calc(#{var-list(var-prefixer(textarea-resize-icon-padding))} * -1 + 2px);\n display: block;\n padding: var-list(var-prefixer(textarea-resize-icon-padding));\n font-size: 0;\n\n &:focus {\n outline: none;\n box-shadow: none;\n }\n\n :host([resize='both']) & {\n cursor: se-resize;\n }\n\n :host([resize='vertical']) &,\n :host([resize='vertical-auto']) & {\n cursor: s-resize;\n }\n\n :host([resize='horizontal']) & {\n cursor: e-resize;\n }\n}\n","import {\n Component,\n EventEmitter,\n Prop,\n Event,\n Element,\n Fragment,\n State,\n h,\n Watch,\n Listen,\n Method,\n} from '@stencil/core';\nimport { IDict } from 'src/util';\nimport {\n createGuid,\n debounce,\n isEventFromElement,\n renderLabel,\n loc,\n renderMessages,\n overrideFocus,\n setMessageHeight,\n} from 'src/utils';\n\n/** @slot label - An optional slot to display a custom label. */\n@Component({ tag: 'q2-textarea', shadow: true, styleUrl: 'q2-textarea.scss' })\nexport class Q2Textarea {\n // #region Own Properties\n\n contentContainer?: HTMLDivElement;\n debouncedScreenReaderCharacterCount = debounce(() => {\n this.updateScreenReaderCharacterCount();\n }, 2000);\n describeByScreenReaderCharacterCount = true;\n guid = createGuid();\n scheduledAfterRender: (() => void)[] = [];\n textareaField?: HTMLTextAreaElement;\n valueOnFocus: string;\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 downParams: IDict<number>;\n\n @State()\n hasFocus: boolean;\n\n @State()\n screenReaderCharacterCount: number;\n\n // #endregion\n // #region Public Property API\n\n /**\n * Defines the number of columns displayed in the field.\n * If not set, the field will be full-width and respond to the window size.\n */\n @Prop({ reflect: true })\n cols: number;\n\n /** Indicates the field cannot be focused or interacted with. */\n @Prop({ reflect: true })\n disabled: boolean;\n\n /**\n * Each item in the `errors` array will appear below the input field when the field is focused.\n * @localizable\n */\n @Prop()\n errors: string[];\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 })\n hideLabel: boolean;\n\n /**\n * When `true` and the input field has an active validation error, the field shows the error state without displaying associated error messages below the field (from the errors array above).\n * Primarily used for dropdown selects and date pickers whose controls appear below the input field (where the error messages, if displayed, would also appear).\n */\n @Prop({ reflect: true })\n hideMessages: boolean;\n\n /**\n * Each item in the `hints` array will appear below the input field when the field is focused.\n * @info\n * The `errors` array takes precedence over the `hints` array. If an input field has both hints and errors, only the errors will display.\n * Once all errors are resolved, the hints display the next time the field is focused.\n * @localizable\n */\n @Prop()\n hints: string[];\n\n /**\n * The label that appears above the field. This is announced by screen readers when the field is focused.\n * @localizable\n */\n @Prop({ reflect: true })\n label: string;\n\n /**\n * Defines the maximum allowed input length in characters. Formatting characters (e.g. `.`, `-`, etc) are included in the `maxlength` comparison.\n * Make sure you account for them when setting the `maxlength` value.\n * @info\n * Please set the `rows` attribute in correlation with `maxlength` to show as much text as possible in the field viewport.\n */\n @Prop({ reflect: true, mutable: true })\n maxlength: number;\n\n /** Appends \"(optional)\" to the field label, and sets `aria-required` on the nested input tag to `false`. */\n @Prop({ reflect: true })\n optional: boolean;\n\n /**\n * Text that appears within the field when it is blurred and empty.\n * Placeholder text disappears when the user focuses on the field and provides input.\n * @info\n * Primarily used for rare cases in which a visible form label is not expected (e.g., search fields).\n * @localizable\n */\n @Prop({ reflect: true })\n placeholder: string;\n\n /**\n * Appends \"(read only)\" to the field label, and field becomes unusable, but remains focusable.\n * Takes priority over `optional` if both are `true`.\n */\n @Prop({ reflect: true })\n readonly: boolean;\n\n /** Indicates how the field is resizable. */\n @Prop({ reflect: true })\n resize: 'none' | 'vertical' | 'horizontal' | 'both' | 'vertical-auto' = 'vertical';\n\n /** Defines the number of rows displayed in the field. */\n @Prop({ reflect: true })\n rows: number;\n\n /** Determines whether the field is subject to spell-checking by the underlying browser or OS. */\n @Prop({ reflect: true })\n spellcheck: boolean;\n\n /** The value of the field. */\n @Prop({ mutable: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the field loses focus after the value has been changed.\n * @legacyEvent\n */\n @Event()\n change: EventEmitter<{ value: string }>;\n\n /**\n * Emitted when the field value is updated.\n * @legacyEvent\n */\n @Event()\n input: EventEmitter<{ value: string }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n if (isNaN(this.maxlength)) {\n this.maxlength = undefined;\n }\n\n if (this.maxlength) {\n this.updateScreenReaderCharacterCount();\n }\n }\n\n componentDidLoad() {\n overrideFocus(this.hostElement);\n }\n\n componentDidRender() {\n this.scheduledAfterRender.push(this.checkRows, this.checkCols, this.increaseHeightIfOverflowing);\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 (event.target === this.hostElement && !this.hostElement.onchange) {\n this.value = event.detail.value;\n }\n }\n\n @Listen('focus')\n onHostElementFocus(event: Event) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.textareaField.focus();\n }\n\n @Listen('input')\n onHostElementInput(event: CustomEvent) {\n if (event.target === this.hostElement && !this.hostElement.oninput) {\n this.value = event.detail.value;\n }\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * Emulates focusing the `<textarea>`, centering the provided value, and emitting an `input` event.\n *\n * This method leaves the focus on the `<textarea>` and as a result does not trigger the `change` event. If you want\n * to trigger the `change` event, move the focus to another element after calling this method.\n *\n * @testOnly\n */\n @Method()\n setValue(value: string) {\n const { textareaField } = this;\n textareaField.focus();\n textareaField.value = value;\n textareaField.dispatchEvent(new InputEvent('input'));\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('cols')\n colsObserver() {\n this.contentContainer.style.width = null;\n }\n\n @Watch('errors')\n errorsObserver() {\n this.hasFocus && this.scheduledAfterRender.push(() => setMessageHeight(this));\n }\n\n @Watch('hints')\n hintsObserver() {\n this.hasFocus && this.scheduledAfterRender.push(() => setMessageHeight(this));\n }\n\n @Watch('maxlength')\n maxlengthObserver() {\n if (this.maxlength) {\n this.updateScreenReaderCharacterCount();\n }\n }\n\n @Watch('rows')\n rowsObserver() {\n this.contentContainer.style.height = null;\n }\n\n @Watch('value')\n valueObserver() {\n const { maxlength, value = '' } = this;\n if (!maxlength) return;\n\n const truncatedValue = value.substr(0, maxlength);\n if (truncatedValue === value) return;\n\n this.change.emit({ value: truncatedValue });\n }\n\n // #endregion\n // #region Local Methods\n\n get hasError() {\n return Array.isArray(this.errors) && this.errors.length > 0;\n }\n\n get inputDescribedBy() {\n let describedBy = undefined;\n\n if (this.showMessages) {\n describedBy = `${this.inputId}-description`;\n }\n\n // Remove screen reader character count from described by after typing\n // starts to avoid double announcement. It's needed on focus to announce\n // the character count when field gains focus.\n if (this.maxlength && this.describeByScreenReaderCharacterCount) {\n describedBy = describedBy ? `${describedBy} ${this.inputId}-max-length` : `${this.inputId}-max-length`;\n }\n\n return describedBy;\n }\n\n get inputId() {\n return `input-guid-${this.guid}`;\n }\n\n get messages(): string[] {\n return (\n (this.errors && this.errors.length > 0 && this.errors) ||\n (this.hints && this.hints.length > 0 && this.hints) ||\n []\n );\n }\n\n get showMessages() {\n return this.messages.length > 0 && !this.hideMessages;\n }\n\n get showResize() {\n const { resize } = this;\n return resize && resize !== 'none';\n }\n\n get wrapperClasses() {\n const errorClass = this.hasError ? ' has-error' : '';\n const valueClass = !!this.value ? ' has-value' : '';\n const focusClass = this.hasFocus ? ' has-focus' : '';\n\n return `field-container${errorClass}${valueClass}${focusClass}`;\n }\n\n checkCols = () => {\n const { contentContainer, cols, textareaField, resize } = this;\n\n if (!cols || ['none', 'vertical'].includes(resize)) return;\n contentContainer.style.width = `${contentContainer.offsetWidth}px`;\n textareaField.removeAttribute('cols');\n };\n\n checkRows = () => {\n const { contentContainer, rows, textareaField, resize } = this;\n\n if (!rows || ['none', 'horizontal'].includes(resize)) return;\n contentContainer.style.height = `${contentContainer.offsetHeight}px`;\n textareaField.removeAttribute('rows');\n };\n\n getBorderOffset = () => {\n const computedStyle = window.getComputedStyle(this.textareaField);\n\n return parseInt(computedStyle.borderTopWidth, 10) + parseInt(computedStyle.borderBottomWidth, 10);\n };\n\n increaseHeightIfOverflowing = () => {\n const { scrollHeight } = this.textareaField;\n if (this.resize === 'vertical-auto' && this.isOverflowingVertically()) {\n // need to account for border width because scrollHeight does not include it\n const newHeight = scrollHeight + this.getBorderOffset();\n this.contentContainer.style.height = `${newHeight}px`;\n }\n };\n\n isOverflowingVertically = () => {\n const { clientHeight, scrollHeight } = this.textareaField;\n\n return scrollHeight > clientHeight;\n };\n\n onMouseDown = (event: MouseEvent) => {\n const { contentContainer } = this;\n this.downParams = {\n width: contentContainer.offsetWidth,\n height: contentContainer.offsetHeight,\n x: event.clientX,\n y: event.clientY,\n };\n document.addEventListener('mousemove', this.onMouseMove);\n document.addEventListener('mouseup', this.onMouseUp);\n };\n\n onMouseMove = (event: MouseEvent) => {\n this.setHeight(event);\n this.setWidth(event);\n };\n\n onMouseUp = () => {\n document.removeEventListener('mousemove', this.onMouseMove);\n document.removeEventListener('mouseup', this.onMouseUp);\n this.downParams = null;\n };\n\n onTextareaBlur = () => {\n const {\n valueOnFocus,\n textareaField: { value },\n } = this;\n this.describeByScreenReaderCharacterCount = true;\n this.hasFocus = false;\n setMessageHeight(this);\n if (valueOnFocus !== value) this.change.emit({ value });\n };\n\n onTextareaChange = (event: InputEvent) => {\n event.stopPropagation();\n const value = (event.target as HTMLTextAreaElement).value;\n\n this.change.emit({ value });\n };\n\n onTextareaFocus = () => {\n this.hasFocus = true;\n this.valueOnFocus = this.value;\n setMessageHeight(this);\n };\n\n onTextareaInput = (event: InputEvent) => {\n event.stopPropagation();\n const value = (event.target as HTMLTextAreaElement).value;\n this.describeByScreenReaderCharacterCount = false;\n this.increaseHeightIfOverflowing();\n if (this.maxlength) this.debouncedScreenReaderCharacterCount();\n this.input.emit({ value });\n };\n\n onTouchMove = (event: TouchEvent) => {\n this.setHeight(event);\n this.setWidth(event);\n };\n\n onTouchStart = (event: TouchEvent) => {\n if (event.touches.length !== 1) return;\n\n event.preventDefault();\n\n const { contentContainer } = this;\n const firstTouch = event.touches[0];\n\n this.downParams = {\n width: contentContainer.offsetWidth,\n height: contentContainer.offsetHeight,\n x: firstTouch.pageX,\n y: firstTouch.pageY,\n };\n\n document.addEventListener('touchmove', this.onTouchMove);\n document.addEventListener('touchend', this.onTouchMove);\n };\n\n setHeight(event: MouseEvent | TouchEvent) {\n const {\n contentContainer,\n resize,\n downParams: { height, y },\n } = this;\n const resizeY = ['both', 'vertical', 'vertical-auto'].includes(resize);\n\n if (!resizeY) return;\n\n const eventY = event instanceof MouseEvent ? event.clientY : event.touches[0]?.pageY ?? 0;\n const newHeight = height - (y - eventY);\n // If 'vertical-auto', change height if the new height is greater\n // than the current height or the textarea is not overflowing.\n // Otherwise, change height regardless of the new height.\n if (\n resize !== 'vertical-auto' ||\n newHeight > height ||\n (resize === 'vertical-auto' && !this.isOverflowingVertically())\n ) {\n contentContainer.style.height = `${newHeight}px`;\n }\n }\n\n setWidth(event: MouseEvent | TouchEvent) {\n const {\n contentContainer,\n resize,\n downParams: { width, x },\n } = this;\n\n const resizeX = ['both', 'horizontal'].includes(resize);\n\n if (!resizeX) return;\n const eventX = event instanceof MouseEvent ? event.clientX : event.touches[0]?.pageX ?? 0;\n const newWidth = width - (x - eventX);\n contentContainer.style.width = `${newWidth}px`;\n }\n\n updateScreenReaderCharacterCount = () => {\n this.screenReaderCharacterCount = this.value?.length || 0;\n };\n\n // #endregion\n // #region Render Methods\n\n renderInput() {\n const textareaClasses = this.resize === 'vertical-auto' ? 'resize-vertical-auto' : '';\n\n return (\n <div class=\"input-container\">\n <textarea\n id={this.inputId}\n class={textareaClasses}\n placeholder={(this.placeholder && loc(this.placeholder)) || undefined}\n test-id=\"inputField\"\n maxLength={this.maxlength}\n aria-describedby={this.inputDescribedBy}\n aria-invalid={`${this.hasError}`}\n aria-required={`${!this.optional}`}\n aria-label={this.hideLabel && this.label}\n spellcheck={this.spellcheck}\n rows={this.rows || 3}\n cols={this.cols}\n value={this.value}\n ref={el => (this.textareaField = el)}\n readonly={!!this.readonly}\n disabled={!!this.disabled}\n maxlength={this.maxlength}\n onInput={this.onTextareaInput}\n onChange={this.onTextareaChange}\n onFocus={this.onTextareaFocus}\n onBlur={this.onTextareaBlur}\n ></textarea>\n {this.hasError ? (\n <q2-icon\n type=\"error\"\n class=\"icon-error\"\n />\n ) : (\n ''\n )}\n {this.showResize && (\n <button\n onMouseDown={this.onMouseDown}\n onTouchStart={this.onTouchStart}\n class=\"btn-resize\"\n aria-label={loc('tecton.element.input.resize')}\n tabIndex={-1}\n >\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 12 12\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.5 11.5l3-3m-7 3l7-7m-11 7l11-11\"\n fill=\"none\"\n stroke-stroke-linecap=\"square\"\n />\n </svg>\n </button>\n )}\n </div>\n );\n }\n\n renderMaxLength() {\n return (\n <Fragment>\n <div\n class=\"max-length\"\n aria-hidden=\"true\"\n >\n {this.value?.length || 0}/{this.maxlength}\n </div>\n <div\n aria-live=\"polite\"\n class=\"sr\"\n id={`${this.inputId}-max-length`}\n test-id=\"max-length-sr\"\n >\n {loc('tecton.element.textarea.characterCount.screenReader', [\n this.screenReaderCharacterCount,\n this.maxlength,\n ])}\n </div>\n </Fragment>\n );\n }\n\n render() {\n return (\n <div class={this.wrapperClasses}>\n {renderLabel(this)}\n <div\n class=\"content-container\"\n ref={el => (this.contentContainer = el)}\n >\n {this.renderInput()}\n {this.maxlength ? this.renderMaxLength() : ''}\n {renderMessages(this)}\n </div>\n </div>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["q2TextareaCss","Q2Textarea","constructor","hostRef","this","debouncedScreenReaderCharacterCount","debounce","updateScreenReaderCharacterCount","describeByScreenReaderCharacterCount","guid","createGuid","scheduledAfterRender","resize","checkCols","contentContainer","cols","textareaField","includes","style","width","offsetWidth","removeAttribute","checkRows","rows","height","offsetHeight","getBorderOffset","computedStyle","window","getComputedStyle","parseInt","borderTopWidth","borderBottomWidth","increaseHeightIfOverflowing","scrollHeight","isOverflowingVertically","newHeight","clientHeight","onMouseDown","event","downParams","x","clientX","y","clientY","document","addEventListener","onMouseMove","onMouseUp","setHeight","setWidth","removeEventListener","onTextareaBlur","valueOnFocus","value","hasFocus","setMessageHeight","change","emit","onTextareaChange","stopPropagation","target","onTextareaFocus","onTextareaInput","maxlength","input","onTouchMove","onTouchStart","touches","length","preventDefault","firstTouch","pageX","pageY","screenReaderCharacterCount","_a","componentWillLoad","isNaN","undefined","componentDidLoad","overrideFocus","hostElement","componentDidRender","push","forEach","fn","onHostElementChange","onchange","detail","onHostElementFocus","isEventFromElement","focus","onHostElementInput","oninput","setValue","dispatchEvent","InputEvent","colsObserver","errorsObserver","hintsObserver","maxlengthObserver","rowsObserver","valueObserver","truncatedValue","substr","hasError","Array","isArray","errors","inputDescribedBy","describedBy","showMessages","inputId","messages","hints","hideMessages","showResize","wrapperClasses","errorClass","valueClass","focusClass","resizeY","eventY","MouseEvent","_b","resizeX","eventX","newWidth","renderInput","textareaClasses","h","class","id","placeholder","loc","maxLength","optional","hideLabel","label","spellcheck","ref","el","readonly","disabled","onInput","onChange","onFocus","onBlur","type","tabIndex","viewBox","xmlns","d","fill","renderMaxLength","Fragment","render","key","renderLabel","renderMessages"],"sources":["src/components/q2-textarea/q2-textarea.scss?tag=q2-textarea&encapsulation=shadow","src/components/q2-textarea/q2-textarea.tsx"],"sourcesContent":["@import '../../styles/host';\n@import '../../styles/functions';\n\n:host {\n --comp-default-textarea-margin: #{var-list(var-prefixer(textarea-margin-top), --app-scale-5x, 25px) 0\n var-list(var-prefixer(textarea-margin-bottom), --app-scale-5x, 25px)};\n display: block;\n margin: var-list(--tct-textarea-margin, --comp-default-textarea-margin);\n font-size: var-list(var-prefixer(textarea-font-size), --app-font-size, inherit);\n font-weight: var-list(var-prefixer(textarea-font-weight), 400);\n}\n\n:host([hidden]) {\n display: none;\n}\n\nlabel {\n --comp-label-padding: #{var-list(\n --tct-textarea-label-padding,\n unquote(\n '0 #{var-list(var-prefixer(textarea-label-padding-right), 0)} 0 #{var-list(var-prefixer(textarea-label-padding-left), 0)}'\n )\n )};\n --comp-label-margin: #{var-list(\n --tct-textarea-label-margin,\n unquote(\n '#{var-list(var-prefixer(textarea-label-margin-top), 0)} 0 #{var-list(var-prefixer(textarea-label-margin-bottom), --tct-scale-1x, --app-scale-1x, 5px)}'\n )\n )};\n display: block;\n padding: var(--comp-label-padding);\n margin: var(--comp-label-margin);\n color: var-list(var-prefixer(textarea-label-font-color), inherit);\n font-size: var-list(var-prefixer(textarea-label-font-size), inherit);\n font-weight: var-list(var-prefixer(textarea-label-font-weight), 600);\n text-transform: var-list(var-prefixer(textarea-label-text-transform), none);\n letter-spacing: var-list(var-prefixer(textarea-label-letter-spacing), inherit);\n transition: color var-list(var-prefixer(textarea-tween), --tct-tween-2, --app-tween-2, unquote('0.4s ease'));\n\n .has-error & {\n color: var-list(var-prefixer(textarea-error-label-font-color), --tct-textarea-label-font-color, inherit);\n }\n\n :hover & {\n color: var-list(--tct-textarea-hover-label-font-color, var-prefixer(textarea-label-font-color), inherit);\n .has-error & {\n color: var-list(\n --tct-textarea-error-hover-label-font-color,\n var-prefixer(textarea-error-label-font-color),\n --tct-textarea-hover-label-font-color,\n --tct-textarea-label-font-color,\n inherit\n );\n }\n }\n\n :host(:focus-within) & {\n color: var-list(--tct-textarea-focus-label-font-color, var-prefixer(textarea-label-font-color), inherit);\n }\n\n :host(:focus-within) .has-error & {\n color: var-list(\n --tct-textarea-error-focus-label-font-color,\n var-prefixer(textarea-error-label-font-color),\n --tct-textarea-focus-label-font-color,\n var-prefixer(textarea-label-font-color),\n inherit\n );\n }\n}\n\n.optional-tag {\n --comp-label-optional-margin: #{var-list(\n --tct-textarea-label-optional-margin,\n unquote(\n '0 0 0 #{var-list(var-prefixer(textarea-label-optional-margin-left), --tct-scale-1x, --app-scale-1x, 5px)}'\n )\n )};\n margin: var(--comp-label-optional-margin);\n color: var-list(\n var-prefixer(textarea-label-optional-font-color),\n --t-textA,\n --t-a11y-gray-color,\n rgba(77, 77, 77, 0.77)\n );\n font-size: var-list(var-prefixer(textarea-label-optional-font-size), 12px);\n font-weight: var-list(var-prefixer(textarea-label-optional-font-weight), 400);\n}\n\n.input-container {\n min-height: var-list(var-prefixer(textarea-min-height), --comp-textarea-min-height);\n height: 100%;\n --comp-default-border-radius: #{var-list(--tct-border-radius-1, --app-border-radius-1, 4px)};\n --comp-textarea-border-top-left-radius: #{var-list(\n var-prefixer(textarea-border-top-left-radius),\n --comp-default-border-radius\n )};\n --comp-textarea-border-top-right-radius: #{var-list(\n var-prefixer(textarea-border-top-right-radius),\n --comp-default-border-radius\n )};\n --comp-textarea-border-bottom-right-radius: #{var-list(\n var-prefixer(textarea-border-bottom-right-radius),\n --comp-default-border-radius\n )};\n --comp-textarea-border-bottom-left-radius: #{var-list(\n var-prefixer(textarea-border-bottom-left-radius),\n --comp-default-border-radius\n )};\n --comp-textarea-border-radius: var(--comp-textarea-border-top-left-radius)\n var(--comp-textarea-border-top-right-radius) var(--comp-textarea-border-bottom-right-radius)\n var(--comp-textarea-border-bottom-left-radius);\n --comp-textarea-border-width: #{var-list(var-prefixer(textarea-border-top-width), 1px)\n var-list(var-prefixer(textarea-border-right-width), 1px)\n var-list(var-prefixer(textarea-border-bottom-width), 1px)\n var-list(var-prefixer(textarea-border-left-width), 1px)};\n --comp-textarea-icon-clearance: 34px;\n\n :host([disabled]) & {\n cursor: not-allowed;\n opacity: var-list(var-prefixer(textarea-disabled-opacity), --tct-disabled-opacity, --app-disabled-opacity, 0.4);\n backdrop-filter: var-list(--tct-textarea-disabled-backdrop-filter, --comp-input-backdrop-filter);\n }\n}\n\n.content-container {\n --comp-textarea-min-height: 46px;\n --comp-textarea-min-width: 150px;\n position: relative;\n display: inline-block;\n min-height: var-list(var-prefixer(textarea-min-height), --comp-textarea-min-height);\n min-width: var-list(var-prefixer(textarea-min-width) --comp-textarea-min-width);\n\n :host(:not([cols])) & {\n width: 100%;\n }\n}\n\ntextarea {\n --comp-textarea-padding: #{var-list(\n --tct-textarea-padding,\n unquote(\n '#{var-list(var-prefixer(textarea-vertical-padding), --tct-scale-2x, --app-scale-2x, 10px)} #{var-list(var-prefixer(textarea-horizontal-padding), --tct-scale-2x, --app-scale-2x, 10px)}'\n )\n )};\n --comp-textarea-backdrop-filter: #{var-list(--tct-textarea-backdrop-filter, none)};\n --comp-textarea-border-color: #{var-list(\n var-prefixer(textarea-border-color),\n var-prefixer(input-border-color),\n --t-a11y-gray-color-AA,\n #949494\n )};\n --comp-textarea-background: #{var-list(\n --tct-textarea-background,\n var-prefixer(textarea-bg),\n --tct-input-background,\n var-prefixer(input-bg),\n --t-gray-14,\n #fcfcfd\n )};\n --comp-textarea-hover-ring-color: var(--tct-textarea-hover-ring-color);\n --comp-textarea-hover-ring: #{0 0 0 2px var(--t-base), 0 0 0 4px var(--comp-textarea-hover-ring-color),\n var-list(--tct-textarea-hover-box-shadow, unquote('0 0 transparent'))};\n\n resize: none;\n height: 100%;\n -webkit-appearance: none;\n appearance: none;\n display: block;\n box-sizing: border-box;\n min-height: var-list(var-prefixer(textarea-min-height), --comp-textarea-min-height);\n padding: var(--comp-textarea-padding);\n backdrop-filter: var(--comp-textarea-backdrop-filter);\n background: var(--comp-textarea-background);\n color: var-list(var-prefixer(textarea-font-color), --t-input-font-color, inherit);\n border-width: var(--comp-textarea-border-width);\n border-style: solid;\n border-color: var(--comp-textarea-border-color);\n border-radius: var(--comp-textarea-border-radius);\n box-shadow: var-list(var-prefixer(textarea-box-shadow), none);\n scrollbar-width: thin;\n scrollbar-color: var(--t-a11y-gray-color) transparent;\n --comp-textarea-tween: #{var-list(var-prefixer(textarea-tween), --tct-tween-2, --app-tween-2, unquote('0.4s ease'))};\n transition:\n background var(--comp-textarea-tween),\n backdrop-filter var(--comp-textarea-tween),\n border-width var(--comp-textarea-tween),\n border-color var(--comp-textarea-tween),\n box-shadow var(--comp-textarea-tween);\n\n &::-webkit-scrollbar {\n width: var(--app-scale-1x);\n height: var(--app-scale-1x);\n margin: var(--app-scale-1x);\n }\n\n &::-webkit-scrollbar-thumb {\n background: var(--t-a11y-gray-color);\n border-radius: 2px;\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n &:not([cols]) {\n width: 100%;\n }\n\n .has-error & {\n padding-right: var(--comp-textarea-icon-clearance);\n backdrop-filter: var-list(--tct-textarea-error-backdrop-filter, var(--comp-textarea-backdrop-filter));\n border-color: var-list(var-prefixer(textarea-error-border-color), --const-stoplight-alert, #d20a0a);\n background: var-list(--tct-textarea-error-background, --comp-textarea-background);\n }\n\n &:hover {\n border-color: var-list(--tct-textarea-hover-border-color, --comp-textarea-border-color);\n backdrop-filter: var-list(--tct-textarea-hover-backdrop-filter, --comp-textarea-backdrop-filter);\n background: var-list(--tct-textarea-hover-background, --comp-textarea-background);\n box-shadow: var-list(--tct-textarea-hover-box-shadow, --comp-textarea-hover-ring);\n\n .has-error & {\n border-color: var-list(\n --tct-textarea-error-hover-border-color,\n var-prefixer(textarea-error-border-color),\n --const-stoplight-alert,\n #d20a0a\n );\n backdrop-filter: var-list(\n --tct-textarea-error-hover-backdrop-filter,\n --tct-textarea-error-backdrop-filter,\n --tct-textarea-hover-backdrop-filter,\n --comp-textarea-backdrop-filter\n );\n background: var-list(\n --tct-textarea-error-hover-background,\n --tct-textarea-error-background,\n --comp-textarea-background\n );\n box-shadow: var-list(\n --tct-textarea-error-hover-box-shadow,\n --tct-textarea-error-box-shadow,\n --tct-textarea-hover-box-shadow,\n --comp-textarea-hover-ring\n );\n }\n }\n\n &:focus {\n border-color: var-list(--tct-textarea-focus-border-color, --comp-textarea-border-color);\n backdrop-filter: var-list(--tct-textarea-focus-backdrop-filter, --comp-textarea-backdrop-filter);\n background: var-list(--tct-textarea-focus-background, --comp-textarea-background);\n\n .has-error & {\n border-color: var-list(\n --tct-textarea-error-focus-border-color,\n --tct-textarea-error-border-color,\n --const-stoplight-alert,\n #d20a0a\n );\n backdrop-filter: var-list(\n --tct-textarea-error-focus-backdrop-filter,\n --tct-textarea-error-backdrop-filter,\n --tct-textarea-focus-backdrop-filter,\n --comp-textarea-backdrop-filter\n );\n background: var-list(\n --tct-textarea-error-focus-background,\n --tct-textarea-error-background,\n --tct-textarea-focus-background,\n --comp-textarea-background\n );\n box-shadow: var-list(\n --tct-textarea-error-focus-box-shadow,\n --tct-textarea-error-box-shadow,\n --tct-textarea-focus-box-shadow,\n --const-double-focus-ring\n );\n }\n }\n &:focus-visible {\n box-shadow: var-list(--tct-textarea-focus-box-shadow, --const-double-focus-ring);\n }\n\n &::placeholder {\n color: var-list(\n var-prefixer(textarea-placeholder-font-color),\n --t-input-placeholder-font-color,\n --tct-gray-7,\n --app-gray-7,\n --tct-gray-d1,\n --app-gray-d1,\n #666666\n );\n }\n\n &[disabled] {\n cursor: not-allowed;\n }\n\n &.resize-vertical-auto {\n overflow: hidden;\n }\n\n .has-error & {\n padding-right: var(--comp-textarea-icon-clearance);\n\n &:not(:focus) {\n border-color: var-list(var-prefixer(textarea-error-border-color), --const-stoplight-alert, #d20a0a);\n }\n }\n}\n\nq2-icon {\n margin-top: calc(#{var-list(var-prefixer(textarea-border-top-width), 1px)} / 2);\n margin-bottom: calc(#{var-list(var-prefixer(textarea-border-bottom-width), 1px)} / 2);\n pointer-events: none;\n position: absolute;\n top: var-list(var-prefixer(textarea-vertical-padding), --tct-scale-2x, --app-scale-2x, 10px);\n color: var-list(var-prefixer(textarea-icon-stroke-primary), --app-gray-9, --tct-gray, --app-gray, #999999);\n right: 0;\n margin-right: var-list(--tct-scale-2x, --app-scale-2x, 10px);\n --tct-icon-stroke-primary: #{var-list(\n var-prefixer(textarea-icon-stroke-primary),\n var-prefixer(gray-9),\n --tct-gray,\n --app-gray,\n #999999\n )};\n --t-icon-stroke-primary: #{var-list(\n var-prefixer(textarea-icon-stroke-primary),\n var-prefixer(gray-9),\n --tct-gray,\n --app-gray,\n #999999\n )};\n}\n\n.icon-error {\n color: var-list(--tct-stoplight-error, --const-stoplight-alert, #d20a0a);\n --tct-icon-stroke-primary: #{var-list(--tct-stoplight-error, --const-stoplight-alert, #d20a0a)};\n --t-icon-stroke-primary: #{var-list(--tct-stoplight-error, --const-stoplight-alert, #d20a0a)};\n}\n\n.messages-container {\n height: 0px;\n overflow: hidden;\n background: var-list(\n --tct-message-background,\n --tct-message-bg,\n var-prefixer(gray-14),\n --tct-gray-l3,\n --app-gray-l3,\n #f2f2f2\n );\n box-shadow: var-list(\n var-prefixer(textarea-message-box-shadow),\n --tct-box-shadow-1,\n --app-shadow-1,\n unquote('0px 0px 2px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.14)')\n );\n transition: height\n var-list(var-prefixer(textarea-messages-tween), --tct-tween-1, --app-tween-1, unquote('0.2s ease'));\n margin-top: 2px;\n z-index: 1;\n position: absolute;\n width: 100%;\n color: var-list(var-prefixer(textarea-messages-font-color), inherit);\n}\n\n.max-length {\n color: var-list(var-prefixer(textarea-max-length-color), --t-textA, rgba(77, 77, 77, 0.77));\n font-size: var-list(\n var-prefixer(textarea-max-length-font-size),\n --tct-font-size-small,\n --app-font-size-small,\n 12px\n );\n position: absolute;\n right: 0;\n}\n\n.btn-resize {\n --tct-textarea-resize-icon-padding: calc(\n calc(\n #{var-list(var-prefixer(textarea-resize-btn-width), --tct-btn-icon-width, 44px)} - #{var-list(\n var-prefixer(textarea-resize-icon-size),\n 12px\n )}\n ) / 2\n );\n width: var-list(var-prefixer(textarea-resize-btn-width), --tct-btn-icon-width, 44px);\n height: var-list(var-prefixer(textarea-resize-btn-height), --tct-btn-icon-height, 44px);\n background: var-list(var-prefixer(textarea-resize-btn-background), transparent);\n stroke: var-list(var-prefixer(textarea-resize-color), --t-textA, rgba(77, 77, 77, 0.77));\n stroke-width: var-list(var-prefixer(textarea-resize-stroke-width), 1);\n border: 0;\n position: absolute;\n right: var-list(\n --tct-textarea-resize-right,\n calc(#{var-list(var-prefixer(textarea-resize-icon-padding))} * -1 + 2px)\n );\n bottom: var-list(\n --tct-textarea-resize-bottom,\n calc(#{var-list(var-prefixer(textarea-resize-icon-padding))} * -1 + 2px)\n );\n display: block;\n padding: var-list(var-prefixer(textarea-resize-icon-padding));\n font-size: 0;\n\n &:focus {\n outline: none;\n box-shadow: none;\n }\n\n :host([resize='both']) & {\n cursor: se-resize;\n }\n\n :host([resize='vertical']) &,\n :host([resize='vertical-auto']) & {\n cursor: s-resize;\n }\n\n :host([resize='horizontal']) & {\n cursor: e-resize;\n }\n}\n","import {\n Component,\n EventEmitter,\n Prop,\n Event,\n Element,\n Fragment,\n State,\n h,\n Watch,\n Listen,\n Method,\n} from '@stencil/core';\nimport { IDict } from 'src/util';\nimport {\n createGuid,\n debounce,\n isEventFromElement,\n renderLabel,\n loc,\n renderMessages,\n overrideFocus,\n setMessageHeight,\n} from 'src/utils';\n\n/** @slot label - An optional slot to display a custom label. */\n@Component({ tag: 'q2-textarea', shadow: true, styleUrl: 'q2-textarea.scss' })\nexport class Q2Textarea {\n // #region Own Properties\n\n contentContainer?: HTMLDivElement;\n debouncedScreenReaderCharacterCount = debounce(() => {\n this.updateScreenReaderCharacterCount();\n }, 2000);\n describeByScreenReaderCharacterCount = true;\n guid = createGuid();\n scheduledAfterRender: (() => void)[] = [];\n textareaField?: HTMLTextAreaElement;\n valueOnFocus: string;\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 downParams: IDict<number>;\n\n @State()\n hasFocus: boolean;\n\n @State()\n screenReaderCharacterCount: number;\n\n // #endregion\n // #region Public Property API\n\n /**\n * Defines the number of columns displayed in the field.\n * If not set, the field will be full-width and respond to the window size.\n */\n @Prop({ reflect: true })\n cols: number;\n\n /** Indicates the field cannot be focused or interacted with. */\n @Prop({ reflect: true })\n disabled: boolean;\n\n /**\n * Each item in the `errors` array will appear below the input field when the field is focused.\n * @localizable\n */\n @Prop()\n errors: string[];\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 })\n hideLabel: boolean;\n\n /**\n * When `true` and the input field has an active validation error, the field shows the error state without displaying associated error messages below the field (from the errors array above).\n * Primarily used for dropdown selects and date pickers whose controls appear below the input field (where the error messages, if displayed, would also appear).\n */\n @Prop({ reflect: true })\n hideMessages: boolean;\n\n /**\n * Each item in the `hints` array will appear below the input field when the field is focused.\n * @info\n * The `errors` array takes precedence over the `hints` array. If an input field has both hints and errors, only the errors will display.\n * Once all errors are resolved, the hints display the next time the field is focused.\n * @localizable\n */\n @Prop()\n hints: string[];\n\n /**\n * The label that appears above the field. This is announced by screen readers when the field is focused.\n * @localizable\n */\n @Prop({ reflect: true })\n label: string;\n\n /**\n * Defines the maximum allowed input length in characters. Formatting characters (e.g. `.`, `-`, etc) are included in the `maxlength` comparison.\n * Make sure you account for them when setting the `maxlength` value.\n * @info\n * Please set the `rows` attribute in correlation with `maxlength` to show as much text as possible in the field viewport.\n */\n @Prop({ reflect: true, mutable: true })\n maxlength: number;\n\n /** Appends \"(optional)\" to the field label, and sets `aria-required` on the nested input tag to `false`. */\n @Prop({ reflect: true })\n optional: boolean;\n\n /**\n * Text that appears within the field when it is blurred and empty.\n * Placeholder text disappears when the user focuses on the field and provides input.\n * @info\n * Primarily used for rare cases in which a visible form label is not expected (e.g., search fields).\n * @localizable\n */\n @Prop({ reflect: true })\n placeholder: string;\n\n /**\n * Appends \"(read only)\" to the field label, and field becomes unusable, but remains focusable.\n * Takes priority over `optional` if both are `true`.\n */\n @Prop({ reflect: true })\n readonly: boolean;\n\n /** Indicates how the field is resizable. */\n @Prop({ reflect: true })\n resize: 'none' | 'vertical' | 'horizontal' | 'both' | 'vertical-auto' = 'vertical';\n\n /** Defines the number of rows displayed in the field. */\n @Prop({ reflect: true })\n rows: number;\n\n /** Determines whether the field is subject to spell-checking by the underlying browser or OS. */\n @Prop({ reflect: true })\n spellcheck: boolean;\n\n /** The value of the field. */\n @Prop({ mutable: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the field loses focus after the value has been changed.\n * @legacyEvent\n */\n @Event()\n change: EventEmitter<{ value: string }>;\n\n /**\n * Emitted when the field value is updated.\n * @legacyEvent\n */\n @Event()\n input: EventEmitter<{ value: string }>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n if (isNaN(this.maxlength)) {\n this.maxlength = undefined;\n }\n\n if (this.maxlength) {\n this.updateScreenReaderCharacterCount();\n }\n }\n\n componentDidLoad() {\n overrideFocus(this.hostElement);\n }\n\n componentDidRender() {\n this.scheduledAfterRender.push(this.checkRows, this.checkCols, this.increaseHeightIfOverflowing);\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 (event.target === this.hostElement && !this.hostElement.onchange) {\n this.value = event.detail.value;\n }\n }\n\n @Listen('focus')\n onHostElementFocus(event: Event) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.textareaField.focus();\n }\n\n @Listen('input')\n onHostElementInput(event: CustomEvent) {\n if (event.target === this.hostElement && !this.hostElement.oninput) {\n this.value = event.detail.value;\n }\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * Emulates focusing the `<textarea>`, centering the provided value, and emitting an `input` event.\n *\n * This method leaves the focus on the `<textarea>` and as a result does not trigger the `change` event. If you want\n * to trigger the `change` event, move the focus to another element after calling this method.\n *\n * @testOnly\n */\n @Method()\n setValue(value: string) {\n const { textareaField } = this;\n textareaField.focus();\n textareaField.value = value;\n textareaField.dispatchEvent(new InputEvent('input'));\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('cols')\n colsObserver() {\n this.contentContainer.style.width = null;\n }\n\n @Watch('errors')\n errorsObserver() {\n this.hasFocus && this.scheduledAfterRender.push(() => setMessageHeight(this));\n }\n\n @Watch('hints')\n hintsObserver() {\n this.hasFocus && this.scheduledAfterRender.push(() => setMessageHeight(this));\n }\n\n @Watch('maxlength')\n maxlengthObserver() {\n if (this.maxlength) {\n this.updateScreenReaderCharacterCount();\n }\n }\n\n @Watch('rows')\n rowsObserver() {\n this.contentContainer.style.height = null;\n }\n\n @Watch('value')\n valueObserver() {\n const { maxlength, value = '' } = this;\n if (!maxlength) return;\n\n const truncatedValue = value.substr(0, maxlength);\n if (truncatedValue === value) return;\n\n this.change.emit({ value: truncatedValue });\n }\n\n // #endregion\n // #region Local Methods\n\n get hasError() {\n return Array.isArray(this.errors) && this.errors.length > 0;\n }\n\n get inputDescribedBy() {\n let describedBy = undefined;\n\n if (this.showMessages) {\n describedBy = `${this.inputId}-description`;\n }\n\n // Remove screen reader character count from described by after typing\n // starts to avoid double announcement. It's needed on focus to announce\n // the character count when field gains focus.\n if (this.maxlength && this.describeByScreenReaderCharacterCount) {\n describedBy = describedBy ? `${describedBy} ${this.inputId}-max-length` : `${this.inputId}-max-length`;\n }\n\n return describedBy;\n }\n\n get inputId() {\n return `input-guid-${this.guid}`;\n }\n\n get messages(): string[] {\n return (\n (this.errors && this.errors.length > 0 && this.errors) ||\n (this.hints && this.hints.length > 0 && this.hints) ||\n []\n );\n }\n\n get showMessages() {\n return this.messages.length > 0 && !this.hideMessages;\n }\n\n get showResize() {\n const { resize } = this;\n return resize && resize !== 'none';\n }\n\n get wrapperClasses() {\n const errorClass = this.hasError ? ' has-error' : '';\n const valueClass = !!this.value ? ' has-value' : '';\n const focusClass = this.hasFocus ? ' has-focus' : '';\n\n return `field-container${errorClass}${valueClass}${focusClass}`;\n }\n\n checkCols = () => {\n const { contentContainer, cols, textareaField, resize } = this;\n\n if (!cols || ['none', 'vertical'].includes(resize)) return;\n contentContainer.style.width = `${contentContainer.offsetWidth}px`;\n textareaField.removeAttribute('cols');\n };\n\n checkRows = () => {\n const { contentContainer, rows, textareaField, resize } = this;\n\n if (!rows || ['none', 'horizontal'].includes(resize)) return;\n contentContainer.style.height = `${contentContainer.offsetHeight}px`;\n textareaField.removeAttribute('rows');\n };\n\n getBorderOffset = () => {\n const computedStyle = window.getComputedStyle(this.textareaField);\n\n return parseInt(computedStyle.borderTopWidth, 10) + parseInt(computedStyle.borderBottomWidth, 10);\n };\n\n increaseHeightIfOverflowing = () => {\n const { scrollHeight } = this.textareaField;\n if (this.resize === 'vertical-auto' && this.isOverflowingVertically()) {\n // need to account for border width because scrollHeight does not include it\n const newHeight = scrollHeight + this.getBorderOffset();\n this.contentContainer.style.height = `${newHeight}px`;\n }\n };\n\n isOverflowingVertically = () => {\n const { clientHeight, scrollHeight } = this.textareaField;\n\n return scrollHeight > clientHeight;\n };\n\n onMouseDown = (event: MouseEvent) => {\n const { contentContainer } = this;\n this.downParams = {\n width: contentContainer.offsetWidth,\n height: contentContainer.offsetHeight,\n x: event.clientX,\n y: event.clientY,\n };\n document.addEventListener('mousemove', this.onMouseMove);\n document.addEventListener('mouseup', this.onMouseUp);\n };\n\n onMouseMove = (event: MouseEvent) => {\n this.setHeight(event);\n this.setWidth(event);\n };\n\n onMouseUp = () => {\n document.removeEventListener('mousemove', this.onMouseMove);\n document.removeEventListener('mouseup', this.onMouseUp);\n this.downParams = null;\n };\n\n onTextareaBlur = () => {\n const {\n valueOnFocus,\n textareaField: { value },\n } = this;\n this.describeByScreenReaderCharacterCount = true;\n this.hasFocus = false;\n setMessageHeight(this);\n if (valueOnFocus !== value) this.change.emit({ value });\n };\n\n onTextareaChange = (event: InputEvent) => {\n event.stopPropagation();\n const value = (event.target as HTMLTextAreaElement).value;\n\n this.change.emit({ value });\n };\n\n onTextareaFocus = () => {\n this.hasFocus = true;\n this.valueOnFocus = this.value;\n setMessageHeight(this);\n };\n\n onTextareaInput = (event: InputEvent) => {\n event.stopPropagation();\n const value = (event.target as HTMLTextAreaElement).value;\n this.describeByScreenReaderCharacterCount = false;\n this.increaseHeightIfOverflowing();\n if (this.maxlength) this.debouncedScreenReaderCharacterCount();\n this.input.emit({ value });\n };\n\n onTouchMove = (event: TouchEvent) => {\n this.setHeight(event);\n this.setWidth(event);\n };\n\n onTouchStart = (event: TouchEvent) => {\n if (event.touches.length !== 1) return;\n\n event.preventDefault();\n\n const { contentContainer } = this;\n const firstTouch = event.touches[0];\n\n this.downParams = {\n width: contentContainer.offsetWidth,\n height: contentContainer.offsetHeight,\n x: firstTouch.pageX,\n y: firstTouch.pageY,\n };\n\n document.addEventListener('touchmove', this.onTouchMove);\n document.addEventListener('touchend', this.onTouchMove);\n };\n\n setHeight(event: MouseEvent | TouchEvent) {\n const {\n contentContainer,\n resize,\n downParams: { height, y },\n } = this;\n const resizeY = ['both', 'vertical', 'vertical-auto'].includes(resize);\n\n if (!resizeY) return;\n\n const eventY = event instanceof MouseEvent ? event.clientY : event.touches[0]?.pageY ?? 0;\n const newHeight = height - (y - eventY);\n // If 'vertical-auto', change height if the new height is greater\n // than the current height or the textarea is not overflowing.\n // Otherwise, change height regardless of the new height.\n if (\n resize !== 'vertical-auto' ||\n newHeight > height ||\n (resize === 'vertical-auto' && !this.isOverflowingVertically())\n ) {\n contentContainer.style.height = `${newHeight}px`;\n }\n }\n\n setWidth(event: MouseEvent | TouchEvent) {\n const {\n contentContainer,\n resize,\n downParams: { width, x },\n } = this;\n\n const resizeX = ['both', 'horizontal'].includes(resize);\n\n if (!resizeX) return;\n const eventX = event instanceof MouseEvent ? event.clientX : event.touches[0]?.pageX ?? 0;\n const newWidth = width - (x - eventX);\n contentContainer.style.width = `${newWidth}px`;\n }\n\n updateScreenReaderCharacterCount = () => {\n this.screenReaderCharacterCount = this.value?.length || 0;\n };\n\n // #endregion\n // #region Render Methods\n\n renderInput() {\n const textareaClasses = this.resize === 'vertical-auto' ? 'resize-vertical-auto' : '';\n\n return (\n <div class=\"input-container\">\n <textarea\n id={this.inputId}\n class={textareaClasses}\n placeholder={(this.placeholder && loc(this.placeholder)) || undefined}\n test-id=\"inputField\"\n maxLength={this.maxlength}\n aria-describedby={this.inputDescribedBy}\n aria-invalid={`${this.hasError}`}\n aria-required={`${!this.optional}`}\n aria-label={this.hideLabel && this.label}\n spellcheck={this.spellcheck}\n rows={this.rows || 3}\n cols={this.cols}\n value={this.value}\n ref={el => (this.textareaField = el)}\n readonly={!!this.readonly}\n disabled={!!this.disabled}\n maxlength={this.maxlength}\n onInput={this.onTextareaInput}\n onChange={this.onTextareaChange}\n onFocus={this.onTextareaFocus}\n onBlur={this.onTextareaBlur}\n ></textarea>\n {this.hasError ? (\n <q2-icon\n type=\"error\"\n class=\"icon-error\"\n />\n ) : (\n ''\n )}\n {this.showResize && (\n <button\n onMouseDown={this.onMouseDown}\n onTouchStart={this.onTouchStart}\n class=\"btn-resize\"\n aria-label={loc('tecton.element.input.resize')}\n tabIndex={-1}\n >\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 12 12\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.5 11.5l3-3m-7 3l7-7m-11 7l11-11\"\n fill=\"none\"\n stroke-stroke-linecap=\"square\"\n />\n </svg>\n </button>\n )}\n </div>\n );\n }\n\n renderMaxLength() {\n return (\n <Fragment>\n <div\n class=\"max-length\"\n aria-hidden=\"true\"\n >\n {this.value?.length || 0}/{this.maxlength}\n </div>\n <div\n aria-live=\"polite\"\n class=\"sr\"\n id={`${this.inputId}-max-length`}\n test-id=\"max-length-sr\"\n >\n {loc('tecton.element.textarea.characterCount.screenReader', [\n this.screenReaderCharacterCount,\n this.maxlength,\n ])}\n </div>\n </Fragment>\n );\n }\n\n render() {\n return (\n <div class={this.wrapperClasses}>\n {renderLabel(this)}\n <div\n class=\"content-container\"\n ref={el => (this.contentContainer = el)}\n >\n {this.renderInput()}\n {this.maxlength ? this.renderMaxLength() : ''}\n {renderMessages(this)}\n </div>\n </div>\n );\n }\n\n // #endregion\n}\n"],"mappings":";;;;AAAA,MAAMA,IAAgB;;MC2BTC,IAAU;EADvB,WAAAC,CAAAC;;;;IAKIC,KAAAC,sCAAsCC,GAAS;MAC3CF,KAAKG;AAAkC,QACxC;IACHH,KAAoCI,uCAAG;IACvCJ,KAAIK,OAAGC;IACPN,KAAoBO,uBAAmB;oDA2GvCP,KAAMQ,SAAkE;IA8LxER,KAASS,YAAG;MACR,OAAMC,kBAAEA,GAAgBC,MAAEA,GAAIC,eAAEA,GAAaJ,QAAEA,KAAWR;MAE1D,KAAKW,KAAQ,EAAC,QAAQ,aAAYE,SAASL,IAAS;MACpDE,EAAiBI,MAAMC,QAAQ,GAAGL,EAAiBM;MACnDJ,EAAcK,gBAAgB;AAAO;IAGzCjB,KAASkB,YAAG;MACR,OAAMR,kBAAEA,GAAgBS,MAAEA,GAAIP,eAAEA,GAAaJ,QAAEA,KAAWR;MAE1D,KAAKmB,KAAQ,EAAC,QAAQ,eAAcN,SAASL,IAAS;MACtDE,EAAiBI,MAAMM,SAAS,GAAGV,EAAiBW;MACpDT,EAAcK,gBAAgB;AAAO;IAGzCjB,KAAesB,kBAAG;MACd,MAAMC,IAAgBC,OAAOC,iBAAiBzB,KAAKY;MAEnD,OAAOc,SAASH,EAAcI,gBAAgB,MAAMD,SAASH,EAAcK,mBAAmB;AAAG;IAGrG5B,KAA2B6B,8BAAG;MAC1B,OAAMC,cAAEA,KAAiB9B,KAAKY;MAC9B,IAAIZ,KAAKQ,WAAW,mBAAmBR,KAAK+B,2BAA2B;;QAEnE,MAAMC,IAAYF,IAAe9B,KAAKsB;QACtCtB,KAAKU,iBAAiBI,MAAMM,SAAS,GAAGY;;;IAIhDhC,KAAuB+B,0BAAG;MACtB,OAAME,cAAEA,GAAYH,cAAEA,KAAiB9B,KAAKY;MAE5C,OAAOkB,IAAeG;AAAY;IAGtCjC,KAAAkC,cAAeC;MACX,OAAMzB,kBAAEA,KAAqBV;MAC7BA,KAAKoC,aAAa;QACdrB,OAAOL,EAAiBM;QACxBI,QAAQV,EAAiBW;QACzBgB,GAAGF,EAAMG;QACTC,GAAGJ,EAAMK;;MAEbC,SAASC,iBAAiB,aAAa1C,KAAK2C;MAC5CF,SAASC,iBAAiB,WAAW1C,KAAK4C;AAAU;IAGxD5C,KAAA2C,cAAeR;MACXnC,KAAK6C,UAAUV;MACfnC,KAAK8C,SAASX;AAAM;IAGxBnC,KAAS4C,YAAG;MACRH,SAASM,oBAAoB,aAAa/C,KAAK2C;MAC/CF,SAASM,oBAAoB,WAAW/C,KAAK4C;MAC7C5C,KAAKoC,aAAa;AAAI;IAG1BpC,KAAcgD,iBAAG;MACb,OAAMC,cACFA,GACArC,gBAAesC,OAAEA,MACjBlD;MACJA,KAAKI,uCAAuC;MAC5CJ,KAAKmD,WAAW;MAChBC,EAAiBpD;MACjB,IAAIiD,MAAiBC,GAAOlD,KAAKqD,OAAOC,KAAK;QAAEJ;;AAAQ;IAG3DlD,KAAAuD,mBAAoBpB;MAChBA,EAAMqB;MACN,MAAMN,IAASf,EAAMsB,OAA+BP;MAEpDlD,KAAKqD,OAAOC,KAAK;QAAEJ;;AAAQ;IAG/BlD,KAAe0D,kBAAG;MACd1D,KAAKmD,WAAW;MAChBnD,KAAKiD,eAAejD,KAAKkD;MACzBE,EAAiBpD;AAAK;IAG1BA,KAAA2D,kBAAmBxB;MACfA,EAAMqB;MACN,MAAMN,IAASf,EAAMsB,OAA+BP;MACpDlD,KAAKI,uCAAuC;MAC5CJ,KAAK6B;MACL,IAAI7B,KAAK4D,WAAW5D,KAAKC;MACzBD,KAAK6D,MAAMP,KAAK;QAAEJ;;AAAQ;IAG9BlD,KAAA8D,cAAe3B;MACXnC,KAAK6C,UAAUV;MACfnC,KAAK8C,SAASX;AAAM;IAGxBnC,KAAA+D,eAAgB5B;MACZ,IAAIA,EAAM6B,QAAQC,WAAW,GAAG;MAEhC9B,EAAM+B;MAEN,OAAMxD,kBAAEA,KAAqBV;MAC7B,MAAMmE,IAAahC,EAAM6B,QAAQ;MAEjChE,KAAKoC,aAAa;QACdrB,OAAOL,EAAiBM;QACxBI,QAAQV,EAAiBW;QACzBgB,GAAG8B,EAAWC;QACd7B,GAAG4B,EAAWE;;MAGlB5B,SAASC,iBAAiB,aAAa1C,KAAK8D;MAC5CrB,SAASC,iBAAiB,YAAY1C,KAAK8D;AAAY;IA0C3D9D,KAAgCG,mCAAG;;MAC/BH,KAAKsE,+BAA6BC,IAAAvE,KAAKkD,WAAO,QAAAqB,WAAA,aAAAA,EAAAN,WAAU;AAAC;AA4GhE;;;EAraG,iBAAAO;IACI,IAAIC,MAAMzE,KAAK4D,YAAY;MACvB5D,KAAK4D,YAAYc;;IAGrB,IAAI1E,KAAK4D,WAAW;MAChB5D,KAAKG;;;EAIb,gBAAAwE;IACIC,EAAc5E,KAAK6E;;EAGvB,kBAAAC;IACI9E,KAAKO,qBAAqBwE,KAAK/E,KAAKkB,WAAWlB,KAAKS,WAAWT,KAAK6B;IACpE7B,KAAKO,qBAAqByE,SAAQC,KAAMA;IACxCjF,KAAKO,uBAAuB;;;;EAOhC,mBAAA2E,CAAoB/C;IAChB,IAAIA,EAAMsB,WAAWzD,KAAK6E,gBAAgB7E,KAAK6E,YAAYM,UAAU;MACjEnF,KAAKkD,QAAQf,EAAMiD,OAAOlC;;;EAKlC,kBAAAmC,CAAmBlD;IACf,KAAKmD,EAAmBnD,GAAOnC,KAAK6E,cAAc;IAClD7E,KAAKY,cAAc2E;;EAIvB,kBAAAC,CAAmBrD;IACf,IAAIA,EAAMsB,WAAWzD,KAAK6E,gBAAgB7E,KAAK6E,YAAYY,SAAS;MAChEzF,KAAKkD,QAAQf,EAAMiD,OAAOlC;;;;;;;;;;;;;EAgBlC,QAAAwC,CAASxC;IACL,OAAMtC,eAAEA,KAAkBZ;IAC1BY,EAAc2E;IACd3E,EAAcsC,QAAQA;IACtBtC,EAAc+E,cAAc,IAAIC,WAAW;;;;EAO/C,YAAAC;IACI7F,KAAKU,iBAAiBI,MAAMC,QAAQ;;EAIxC,cAAA+E;IACI9F,KAAKmD,YAAYnD,KAAKO,qBAAqBwE,MAAK,MAAM3B,EAAiBpD;;EAI3E,aAAA+F;IACI/F,KAAKmD,YAAYnD,KAAKO,qBAAqBwE,MAAK,MAAM3B,EAAiBpD;;EAI3E,iBAAAgG;IACI,IAAIhG,KAAK4D,WAAW;MAChB5D,KAAKG;;;EAKb,YAAA8F;IACIjG,KAAKU,iBAAiBI,MAAMM,SAAS;;EAIzC,aAAA8E;IACI,OAAMtC,WAAEA,GAASV,OAAEA,IAAQ,MAAOlD;IAClC,KAAK4D,GAAW;IAEhB,MAAMuC,IAAiBjD,EAAMkD,OAAO,GAAGxC;IACvC,IAAIuC,MAAmBjD,GAAO;IAE9BlD,KAAKqD,OAAOC,KAAK;MAAEJ,OAAOiD;;;;;EAM9B,YAAIE;IACA,OAAOC,MAAMC,QAAQvG,KAAKwG,WAAWxG,KAAKwG,OAAOvC,SAAS;;EAG9D,oBAAIwC;IACA,IAAIC,IAAchC;IAElB,IAAI1E,KAAK2G,cAAc;MACnBD,IAAc,GAAG1G,KAAK4G;;;;;QAM1B,IAAI5G,KAAK4D,aAAa5D,KAAKI,sCAAsC;MAC7DsG,IAAcA,IAAc,GAAGA,KAAe1G,KAAK4G,uBAAuB,GAAG5G,KAAK4G;;IAGtF,OAAOF;;EAGX,WAAIE;IACA,OAAO,cAAc5G,KAAKK;;EAG9B,YAAIwG;IACA,OACK7G,KAAKwG,UAAUxG,KAAKwG,OAAOvC,SAAS,KAAKjE,KAAKwG,UAC9CxG,KAAK8G,SAAS9G,KAAK8G,MAAM7C,SAAS,KAAKjE,KAAK8G,SAC7C;;EAIR,gBAAIH;IACA,OAAO3G,KAAK6G,SAAS5C,SAAS,MAAMjE,KAAK+G;;EAG7C,cAAIC;IACA,OAAMxG,QAAEA,KAAWR;IACnB,OAAOQ,KAAUA,MAAW;;EAGhC,kBAAIyG;IACA,MAAMC,IAAalH,KAAKqG,WAAW,eAAe;IAClD,MAAMc,MAAenH,KAAKkD,QAAQ,eAAe;IACjD,MAAMkE,IAAapH,KAAKmD,WAAW,eAAe;IAElD,OAAO,kBAAkB+D,IAAaC,IAAaC;;EAwHvD,SAAAvE,CAAUV;;IACN,OAAMzB,kBACFA,GAAgBF,QAChBA,GACA4B,aAAYhB,QAAEA,GAAMmB,GAAEA,MACtBvC;IACJ,MAAMqH,IAAU,EAAC,QAAQ,YAAY,kBAAiBxG,SAASL;IAE/D,KAAK6G,GAAS;IAEd,MAAMC,IAASnF,aAAiBoF,aAAapF,EAAMK,WAAUgF,KAAAjD,IAAApC,EAAM6B,QAAQ,QAAI,QAAAO,WAAA,aAAAA,EAAAF,WAAS,QAAAmD,WAAA,IAAAA,IAAA;IACxF,MAAMxF,IAAYZ,KAAUmB,IAAI+E;;;;QAIhC,IACI9G,MAAW,mBACXwB,IAAYZ,KACXZ,MAAW,oBAAoBR,KAAK+B,2BACvC;MACErB,EAAiBI,MAAMM,SAAS,GAAGY;;;EAI3C,QAAAc,CAASX;;IACL,OAAMzB,kBACFA,GAAgBF,QAChBA,GACA4B,aAAYrB,OAAEA,GAAKsB,GAAEA,MACrBrC;IAEJ,MAAMyH,IAAU,EAAC,QAAQ,eAAc5G,SAASL;IAEhD,KAAKiH,GAAS;IACd,MAAMC,IAASvF,aAAiBoF,aAAapF,EAAMG,WAAUkF,KAAAjD,IAAApC,EAAM6B,QAAQ,QAAI,QAAAO,WAAA,aAAAA,EAAAH,WAAS,QAAAoD,WAAA,IAAAA,IAAA;IACxF,MAAMG,IAAW5G,KAASsB,IAAIqF;IAC9BhH,EAAiBI,MAAMC,QAAQ,GAAG4G;;;;EAUtC,WAAAC;IACI,MAAMC,IAAkB7H,KAAKQ,WAAW,kBAAkB,yBAAyB;IAEnF,OACIsH,EAAA;MAAKC,OAAM;OACPD,EAAA;MACIE,IAAIhI,KAAK4G;MACTmB,OAAOF;MACPI,aAAcjI,KAAKiI,eAAeC,EAAIlI,KAAKiI,gBAAiBvD;MAAS,WAC7D;MACRyD,WAAWnI,KAAK4D;MAAS,oBACP5D,KAAKyG;MAAgB,gBACzB,GAAGzG,KAAKqG;MACP,qBAAIrG,KAAKoI;MACZ,cAAApI,KAAKqI,aAAarI,KAAKsI;MACnCC,YAAYvI,KAAKuI;MACjBpH,MAAMnB,KAAKmB,QAAQ;MACnBR,MAAMX,KAAKW;MACXuC,OAAOlD,KAAKkD;MACZsF,KAAKC,KAAOzI,KAAKY,gBAAgB6H;MACjCC,YAAY1I,KAAK0I;MACjBC,YAAY3I,KAAK2I;MACjB/E,WAAW5D,KAAK4D;MAChBgF,SAAS5I,KAAK2D;MACdkF,UAAU7I,KAAKuD;MACfuF,SAAS9I,KAAK0D;MACdqF,QAAQ/I,KAAKgD;QAEhBhD,KAAKqG,WACFyB,EAAA;MACIkB,MAAK;MACLjB,OAAM;SACR,IAIL/H,KAAKgH,cACFc,EACI;MAAA5F,aAAalC,KAAKkC;MAClB6B,cAAc/D,KAAK+D;MACnBgE,OAAM;MACM,cAAAG,EAAI;MAChBe,WAAU;OAEVnB,EACgB;MAAA;MACZoB,SAAQ;MACRC,OAAM;OAENrB,EAAA;MACIsB,GAAE;MACFC,MAAK;MACiB;;;EASlD,eAAAC;;IACI,OACIxB,EAACyB,GAAQ,MACLzB,EAAA;MACIC,OAAM;MAAY,eACN;SAEXxD,IAAAvE,KAAKkD,WAAO,QAAAqB,WAAA,aAAAA,EAAAN,WAAU,GAAC,KAAGjE,KAAK4D,YAEpCkE,EAAA;MAAA,aACc;MACVC,OAAM;MACNC,IAAI,GAAGhI,KAAK4G;MACJ;OAEPsB,EAAI,uDAAuD,EACxDlI,KAAKsE,4BACLtE,KAAK4D;;EAOzB,MAAA4F;IACI,OACI1B,EAAK;MAAA2B,KAAA;MAAA1B,OAAO/H,KAAKiH;OACZyC,EAAY1J,OACb8H,EAAA;MAAA2B,KAAA;MACI1B,OAAM;MACNS,KAAKC,KAAOzI,KAAKU,mBAAmB+H;OAEnCzI,KAAK4H,eACL5H,KAAK4D,YAAY5D,KAAKsJ,oBAAoB,IAC1CK,EAAe3J","ignoreList":[]}
@@ -1,24 +1,24 @@
1
1
  import { h as e } from "./index-COzomxjJ.js";
2
2
 
3
3
  const l = {
4
- circle: ({width: l, additionalClasses: i}) => e("div", {
5
- class: `skeleton-shape circle ${i || ""}`,
4
+ circle: ({width: l, additionalClasses: d}) => e("div", {
5
+ class: `skeleton-shape circle ${d || ""}`,
6
6
  style: {
7
7
  width: l,
8
8
  height: l
9
9
  }
10
10
  }),
11
- rectangle: ({width: l, height: i, borderRadius: d, additionalClasses: t}) => e("div", {
11
+ rectangle: ({width: l, height: d, borderRadius: i, additionalClasses: t}) => e("div", {
12
12
  class: `skeleton-shape rectangle ${t || ""}`,
13
13
  style: {
14
14
  width: l,
15
- height: i,
16
- borderRadius: d
15
+ height: d,
16
+ borderRadius: i
17
17
  }
18
18
  })
19
19
  };
20
20
 
21
- const i = {
21
+ const d = {
22
22
  field: () => e("div", {
23
23
  class: "skeleton-shape field"
24
24
  }, e("div", {
@@ -30,41 +30,42 @@ const i = {
30
30
  height: "var(--tct-input-height, 42px)",
31
31
  borderRadius: "3px"
32
32
  })),
33
- text: (i, d) => {
33
+ text: (d, i) => {
34
34
  var t;
35
- const s = (t = i === null || i === void 0 ? void 0 : i[0]) !== null && t !== void 0 ? t : 1;
36
- const o = d === null || d === void 0 ? void 0 : d.has("header");
37
- const n = (d === null || d === void 0 ? void 0 : d.has("center")) && "center" || (d === null || d === void 0 ? void 0 : d.has("right")) && "right" || "left";
38
- const a = (d === null || d === void 0 ? void 0 : d.has("smallheader")) ? " smaller" : "";
39
- const r = o ? `header ${n}${a}` : "";
35
+ const s = (t = d === null || d === void 0 ? void 0 : d[0]) !== null && t !== void 0 ? t : 1;
36
+ const o = i === null || i === void 0 ? void 0 : i.has("header");
37
+ const a = (i === null || i === void 0 ? void 0 : i.has("center")) && "center" || (i === null || i === void 0 ? void 0 : i.has("right")) && "right" || "left";
38
+ const r = (i === null || i === void 0 ? void 0 : i.has("smallheader")) ? " smaller" : "";
39
+ const n = o ? `header ${a}${r}` : "";
40
40
  return e("div", {
41
41
  class: "skeleton-shape text"
42
42
  }, o && l.rectangle({
43
43
  width: "60%",
44
- additionalClasses: r
44
+ additionalClasses: n
45
45
  }), !!s && Array(s).fill(undefined).map((() => l.rectangle({
46
- height: "1rem"
46
+ height: "1rem",
47
+ borderRadius: "var(--tct-border-radius-1, var(--app-border-radius-1, 4px))"
47
48
  }))));
48
49
  }
49
50
  };
50
51
 
51
- const d = {
52
+ const i = {
52
53
  circle: () => l.circle({
53
54
  width: "100%"
54
55
  }),
55
56
  rectangle: () => l.rectangle({
56
57
  height: "100%",
57
- borderRadius: "var(--tct-border-radius-1, 4px)"
58
+ borderRadius: "var(--tct-border-radius-1, var(--app-border-radius-1, 4px))"
58
59
  }),
59
- table: (i, d) => {
60
+ table: (d, i) => {
60
61
  var t, s;
61
- const o = (t = i === null || i === void 0 ? void 0 : i[0]) !== null && t !== void 0 ? t : 5;
62
- const n = (s = i === null || i === void 0 ? void 0 : i[1]) !== null && s !== void 0 ? s : 5;
63
- const a = d === null || d === void 0 ? void 0 : d.has("headless");
64
- const r = d === null || d === void 0 ? void 0 : d.has("bordered");
62
+ const o = (t = d === null || d === void 0 ? void 0 : d[0]) !== null && t !== void 0 ? t : 5;
63
+ const a = (s = d === null || d === void 0 ? void 0 : d[1]) !== null && s !== void 0 ? s : 5;
64
+ const r = i === null || i === void 0 ? void 0 : i.has("headless");
65
+ const n = i === null || i === void 0 ? void 0 : i.has("bordered");
65
66
  return e("div", {
66
67
  class: "skeleton-shape table"
67
- }, !a && e("div", {
68
+ }, !r && e("div", {
68
69
  class: "skeleton-table-head"
69
70
  }, e("div", {
70
71
  class: "skeleton-table-row skeleton-table-header flex"
@@ -76,31 +77,31 @@ const d = {
76
77
  height: "3px"
77
78
  }))), e("div", {
78
79
  class: "skeleton-table-body"
79
- }, !!n && Array(n).fill(undefined).map((() => e("div", {
80
+ }, !!a && Array(a).fill(undefined).map((() => e("div", {
80
81
  class: "skeleton-table-row-wrapper"
81
82
  }, e("div", {
82
83
  class: "skeleton-table-row flex"
83
84
  }, !!o && Array(o).fill(undefined).map((() => l.rectangle({
84
85
  height: "1.5rem"
85
- })))), r && e("div", {
86
+ })))), n && e("div", {
86
87
  class: "skeleton-table-row-border"
87
88
  }, l.rectangle({
88
89
  height: "1px",
89
90
  additionalClasses: "no-margin"
90
91
  })))))));
91
92
  },
92
- field: i.field,
93
+ field: d.field,
93
94
  form: l => {
94
- var d, t, s;
95
- const o = (d = (l === null || l === void 0 ? void 0 : l[1]) && (l === null || l === void 0 ? void 0 : l[0])) !== null && d !== void 0 ? d : 1;
96
- const n = (s = (t = l === null || l === void 0 ? void 0 : l[1]) !== null && t !== void 0 ? t : l === null || l === void 0 ? void 0 : l[0]) !== null && s !== void 0 ? s : 1;
97
- const a = o * n;
95
+ var i, t, s;
96
+ const o = (i = (l === null || l === void 0 ? void 0 : l[1]) && (l === null || l === void 0 ? void 0 : l[0])) !== null && i !== void 0 ? i : 1;
97
+ const a = (s = (t = l === null || l === void 0 ? void 0 : l[1]) !== null && t !== void 0 ? t : l === null || l === void 0 ? void 0 : l[0]) !== null && s !== void 0 ? s : 1;
98
+ const r = o * a;
98
99
  return e("div", {
99
100
  class: `skeleton-shape form flex columns-${o}`
100
- }, !!a && Array(a).fill(undefined).map(i.field));
101
+ }, !!r && Array(r).fill(undefined).map(d.field));
101
102
  },
102
- text: i.text,
103
- "detailed-item": (d, t) => {
103
+ text: d.text,
104
+ "detailed-item": (i, t) => {
104
105
  const s = t === null || t === void 0 ? void 0 : t.has("square");
105
106
  const o = (t === null || t === void 0 ? void 0 : t.has("center")) && "center" || (t === null || t === void 0 ? void 0 : t.has("right")) && "right" || "left";
106
107
  return e("div", {
@@ -115,11 +116,11 @@ const d = {
115
116
  width: "1.5em"
116
117
  })), e("div", {
117
118
  class: `detailed-item-text flex flex-v-center flex-${o}`
118
- }, e("div", null, i.text(d, t))));
119
+ }, e("div", null, d.text(i, t))));
119
120
  },
120
- "label-value": i => {
121
- var d;
122
- const t = 2 * ((d = i === null || i === void 0 ? void 0 : i[0]) !== null && d !== void 0 ? d : 1);
121
+ "label-value": d => {
122
+ var i;
123
+ const t = 2 * ((i = d === null || d === void 0 ? void 0 : d[0]) !== null && i !== void 0 ? i : 1);
123
124
  return e("div", {
124
125
  class: "skeleton-shape label-value flex"
125
126
  }, !!t && Array(t).fill(undefined).map((() => l.rectangle({
@@ -128,6 +129,6 @@ const d = {
128
129
  }
129
130
  };
130
131
 
131
- export { l as a, d as s };
132
- //# sourceMappingURL=shapes-BrIjALih.js.map
133
- //# sourceMappingURL=shapes-BrIjALih.js.map
132
+ export { l as a, i as s };
133
+ //# sourceMappingURL=shapes-ElQYMSyu.js.map
134
+ //# sourceMappingURL=shapes-ElQYMSyu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shapes-ElQYMSyu.js","sources":["src/components/q2-loading/skeleton/shapes.tsx"],"sourcesContent":["import { h } from '@stencil/core';\nimport { JSX } from './../../../components';\n\ninterface AtomOptions {\n width?: string;\n height?: string;\n borderRadius?: string;\n additionalClasses?: string;\n}\n\nexport const atoms = {\n circle: ({ width, additionalClasses }: AtomOptions): JSX.IntrinsicElements => (\n <div\n class={`skeleton-shape circle ${additionalClasses || ''}`}\n style={{ width, height: width }}\n ></div>\n ),\n rectangle: ({ width, height, borderRadius, additionalClasses }: AtomOptions): JSX.IntrinsicElements => (\n <div\n class={`skeleton-shape rectangle ${additionalClasses || ''}`}\n style={{ width, height, borderRadius }}\n ></div>\n ),\n};\n\nexport const molecules = {\n field: (): JSX.IntrinsicElements => (\n <div class=\"skeleton-shape field\">\n <div class=\"skeleton-field-label\">{atoms.rectangle({ height: '1rem', width: '50%' })}</div>\n {atoms.rectangle({\n height: 'var(--tct-input-height, 42px)',\n borderRadius: '3px',\n })}\n </div>\n ),\n text: (counts?: number[], modifiers?: Set<string>): JSX.IntrinsicElements => {\n const rows = counts?.[0] ?? 1;\n const hasHeader = modifiers?.has('header');\n const alignment = (modifiers?.has('center') && 'center') || (modifiers?.has('right') && 'right') || 'left';\n const smallHeaderClass = modifiers?.has('smallheader') ? ' smaller' : '';\n const additionalClasses = hasHeader ? `header ${alignment}${smallHeaderClass}` : '';\n return (\n <div class=\"skeleton-shape text\">\n {hasHeader && atoms.rectangle({ width: '60%', additionalClasses })}\n {!!rows &&\n Array(rows)\n .fill(undefined)\n .map(() =>\n atoms.rectangle({\n height: '1rem',\n borderRadius: 'var(--tct-border-radius-1, var(--app-border-radius-1, 4px))',\n })\n )}\n </div>\n );\n },\n};\n\nexport const shapes = {\n circle: (): JSX.IntrinsicElements => {\n return atoms.circle({ width: '100%' });\n },\n rectangle: (): JSX.IntrinsicElements => {\n return atoms.rectangle({\n height: '100%',\n borderRadius: 'var(--tct-border-radius-1, var(--app-border-radius-1, 4px))',\n });\n },\n table: (counts?: number[], modifiers?: Set<string>): JSX.IntrinsicElements => {\n const columnCount = counts?.[0] ?? 5;\n const rowCount = counts?.[1] ?? 5;\n const headless = modifiers?.has('headless');\n const bordered = modifiers?.has('bordered');\n return (\n <div class=\"skeleton-shape table\">\n {!headless && (\n <div class=\"skeleton-table-head\">\n <div class=\"skeleton-table-row skeleton-table-header flex\">\n {!!columnCount &&\n Array(columnCount)\n .fill(undefined)\n .map(() => atoms.rectangle({ height: '1rem' }))}\n </div>\n <div class=\"skeleton-table-row-border\">{atoms.rectangle({ height: '3px' })}</div>\n </div>\n )}\n <div class=\"skeleton-table-body\">\n {!!rowCount &&\n Array(rowCount)\n .fill(undefined)\n .map(() => (\n <div class=\"skeleton-table-row-wrapper\">\n <div class=\"skeleton-table-row flex\">\n {!!columnCount &&\n Array(columnCount)\n .fill(undefined)\n .map(() => atoms.rectangle({ height: '1.5rem' }))}\n </div>\n {bordered && (\n <div class=\"skeleton-table-row-border\">\n {atoms.rectangle({\n height: '1px',\n additionalClasses: 'no-margin',\n })}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n );\n },\n field: molecules.field,\n form: (counts?: number[]): JSX.IntrinsicElements => {\n const columns = (counts?.[1] && counts?.[0]) ?? 1;\n const rows = counts?.[1] ?? counts?.[0] ?? 1;\n const totalItems = columns * rows;\n return (\n <div class={`skeleton-shape form flex columns-${columns}`}>\n {!!totalItems && Array(totalItems).fill(undefined).map(molecules.field)}\n </div>\n );\n },\n text: molecules.text,\n 'detailed-item': (counts?: number[], modifiers?: Set<string>): JSX.IntrinsicElements => {\n const isSquare = modifiers?.has('square');\n const alignment = (modifiers?.has('center') && 'center') || (modifiers?.has('right') && 'right') || 'left';\n return (\n <div class={`skeleton-shape detailed-item flex ${alignment}`}>\n <div class={`detailed-item-image flex-${alignment}`}>\n {isSquare\n ? atoms.rectangle({ width: '1.5em', height: '1.5em', borderRadius: '3px' })\n : atoms.circle({ width: '1.5em' })}\n </div>\n <div class={`detailed-item-text flex flex-v-center flex-${alignment}`}>\n <div>{molecules.text(counts, modifiers)}</div>\n </div>\n </div>\n );\n },\n 'label-value': (counts?: number[]): JSX.IntrinsicElements => {\n const cells = 2 * (counts?.[0] ?? 1);\n return (\n <div class=\"skeleton-shape label-value flex\">\n {!!cells &&\n Array(cells)\n .fill(undefined)\n .map(() => atoms.rectangle({ height: '1rem' }))}\n </div>\n );\n },\n};\n\nexport default shapes;\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { ComponentInterface } from '../../stencil-public-runtime';
2
- export declare class Q2Checkbox implements ComponentInterface {
2
+ export declare class Q2Form implements ComponentInterface {
3
3
  /** Changes the vertical spacing of the form-fields contained within the component's slot */
4
4
  spacing: 'none' | 'compact' | 'normal' | 'comfortable';
5
5
  render(): any;
@@ -31,6 +31,7 @@ export type InputType = keyof typeof inputTypeMap;
31
31
  export declare class Q2Input {
32
32
  guid: number;
33
33
  inputRef: HTMLInputElement;
34
+ isClickEvent: boolean;
34
35
  isMobile: boolean;
35
36
  mutationObserver: MutationObserver;
36
37
  resizeObserver: ResizeObserver;
@@ -344,6 +345,7 @@ export declare class Q2Input {
344
345
  onInputFocus: () => void;
345
346
  onInputInput: (event: InputEvent) => void;
346
347
  onInputKeydown: (event: KeyboardEvent) => void;
348
+ onInputMousedown: () => void;
347
349
  onInputPaste: (event: ClipboardEvent) => void;
348
350
  onMutationObserved: () => void;
349
351
  onRefocusInput: () => void;
@@ -1,5 +1,10 @@
1
1
  import { ComponentInterface } from '../../stencil-public-runtime';
2
2
  export declare class Q2Loading implements ComponentInterface {
3
+ ariaLiveTimer: any;
4
+ dontUpdateScreenReaderLabel: boolean;
5
+ observer: IntersectionObserver;
6
+ screenReaderElement: HTMLElement;
7
+ liveRegionChangeIndicatorToggle: boolean;
3
8
  hostElement: HTMLElement;
4
9
  /** @deprecated */
5
10
  ariaLabel: string;
@@ -33,6 +38,8 @@ export declare class Q2Loading implements ComponentInterface {
33
38
  * Supported values depend on the type and shape selected, and are listed in detail in the shape sections above.
34
39
  */
35
40
  modifiers: string;
41
+ /** Hides the loading element from screen readers. */
42
+ hideFromScreenReaders: boolean;
36
43
  /**
37
44
  * The specific visual presentation of a loading element `type`.
38
45
  * @snippet
@@ -44,16 +51,20 @@ export declare class Q2Loading implements ComponentInterface {
44
51
  shape: string;
45
52
  /** The type of loading element to display. */
46
53
  type: 'spinner' | 'skeleton';
54
+ disconnectedCallback(): void;
47
55
  componentWillLoad(): void;
48
- ariaLabelObserver(): void;
56
+ componentDidLoad(): void;
57
+ componentDidUpdate(): void;
49
58
  get countsArray(): number[];
50
- get loader(): () => any;
51
59
  get localizedLabel(): string;
52
60
  get modifiersSet(): Set<string>;
53
61
  get skeletonShape(): any;
54
- get spinnerShape(): any;
55
- halfCircleSpinner: () => any;
56
- skeletonLoader: () => any;
57
- spinner: () => any;
62
+ cleanupLiveRegionDelay(): void;
63
+ setupLiveRegionDelay(): void;
64
+ updateScreenReaderLabel(): void;
65
+ renderHalfCircleSpinner: () => any;
66
+ get renderLoader(): () => any;
67
+ renderSkeletonLoader: () => any;
68
+ renderSpinner: () => any;
58
69
  render(): any;
59
70
  }
@@ -4,9 +4,9 @@ export declare class Q2Optgroup implements ComponentInterface {
4
4
  mutationObserver: MutationObserver;
5
5
  hostElement: HTMLElement;
6
6
  hidden: boolean;
7
- /** Serves as the group header text. */
8
- disabled: boolean;
9
7
  /** Determines whether all nested options are disabled. */
8
+ disabled: boolean;
9
+ /** Serves as the group header text. */
10
10
  label: string;
11
11
  disconnectedCallback(): void;
12
12
  componentWillLoad(): void;
@@ -119,7 +119,7 @@ export declare class Q2Pill implements ComponentInterface {
119
119
  closePopover?: boolean;
120
120
  }): Promise<void>;
121
121
  selectedOptionsChanged(newValue: any): void;
122
- valueChanged(newValue: any): Promise<void>;
122
+ valueChanged(newValue: any, _oldValue: any, propName: any): Promise<void>;
123
123
  get buttonContent(): string;
124
124
  get truncatedButtonContent(): string;
125
125
  _togglePopover(): void;
@@ -23,6 +23,11 @@ export declare class Q2Select implements ComponentInterface {
23
23
  hasPopoverTop: boolean;
24
24
  inputFocused: boolean;
25
25
  open: boolean;
26
+ /**
27
+ * Determines what text to show in the input field.
28
+ * When `true`, the component will display the search text in the input field
29
+ * When `false`, the component will display the selected option(s) in the input field
30
+ */
26
31
  prioritizeSearch: boolean;
27
32
  searchText: string;
28
33
  showSelected: boolean;
@@ -224,7 +229,7 @@ export declare class Q2Select implements ComponentInterface {
224
229
  value?: string;
225
230
  values?: IOptionValue[];
226
231
  }): void;
227
- handleTouchStart: (event: TouchEvent) => void;
232
+ handleTouchMove: (event: TouchEvent) => void;
228
233
  initEventListeners: () => void;
229
234
  initMutationObserver: () => void;
230
235
  inputBlurHandler: () => void;
@@ -11,6 +11,7 @@ type TabPane = {
11
11
  };
12
12
  export declare class Q2TabContainer implements ComponentInterface {
13
13
  guid: number;
14
+ hasValidTab: boolean;
14
15
  lastScrolled: number;
15
16
  listElement: HTMLUListElement;
16
17
  mutationObserver: MutationObserver;
@@ -77,16 +78,17 @@ export declare class Q2TabContainer implements ComponentInterface {
77
78
  get tabList(): Element;
78
79
  get tabPanes(): (HTMLQ2TabPaneElement | HTMLTectonTabPaneElement)[];
79
80
  checkScrollState: () => void;
81
+ determineTabMove(): void;
80
82
  moveToAdjacentTab: (value: string, direction: "next" | "prev" | "first" | "last") => void;
81
- moveToTab: (index: number, shouldFocus?: boolean) => HTMLButtonElement;
83
+ moveToTab: (index: number, shouldFocus?: boolean) => void;
82
84
  onScrollBtnClick: (direction?: "left" | "right") => void;
83
85
  onSlotChange: () => void;
84
86
  onTabClick: (event: MouseEvent) => void;
85
87
  onTabKeyDown: (event: KeyboardEvent) => void;
86
88
  resizeIframe(): void;
87
89
  setTabs: () => void;
88
- updateTabData: () => void;
89
90
  updateTabPaneProps: () => void;
91
+ updateTabs: () => void;
90
92
  renderTab(tab: TabPane, index: number): JSX.IntrinsicElements;
91
93
  renderTabWithBadge(tab: TabPane, isSelected: boolean): JSX.IntrinsicElements;
92
94
  render(): any;
@@ -1994,6 +1994,11 @@ export namespace Components {
1994
1994
  * Numeric adjustments are available for specific `type` and `shape` combinations. These may impact the number of items, columns, and/or rows that display. When `shape="text"`, `shape="detailed-item"`, or `shape="label-value"`, the `counts` attribute determines the number of rows to display. When `shape="table"`, the `counts` attribute can be used in two ways: 1. `counts="CxR"` = Provides a skeleton table of `C` columns and `R` rows. The default value is `"5x5" 2. `counts="N"` - Provides a skeleton table of `N` columns and 5 rows. When `shape="form"`, the `counts` attribute can be used in two ways: 1. `counts="CxR" - Provides a skeleton form of `C` columns and `R` rows of fields. The default value is `"1x1"`. 2. `counts="N"` - Provides a skeleton form of `N` fields stacked in single columns.
1995
1995
  */
1996
1996
  "counts": string;
1997
+ /**
1998
+ * Hides the loading element from screen readers.
1999
+ * @default false
2000
+ */
2001
+ "hideFromScreenReaders": boolean;
1997
2002
  /**
1998
2003
  * Styles the component to have a `height` and `width` of `1em`, making it easy to place alongside text.
1999
2004
  */
@@ -2110,12 +2115,12 @@ export namespace Components {
2110
2115
  }
2111
2116
  interface Q2Optgroup {
2112
2117
  /**
2113
- * Serves as the group header text.
2118
+ * Determines whether all nested options are disabled.
2114
2119
  * @default false
2115
2120
  */
2116
2121
  "disabled": boolean;
2117
2122
  /**
2118
- * Determines whether all nested options are disabled.
2123
+ * Serves as the group header text.
2119
2124
  */
2120
2125
  "label": string;
2121
2126
  }
@@ -6110,6 +6115,11 @@ declare namespace LocalJSX {
6110
6115
  * Numeric adjustments are available for specific `type` and `shape` combinations. These may impact the number of items, columns, and/or rows that display. When `shape="text"`, `shape="detailed-item"`, or `shape="label-value"`, the `counts` attribute determines the number of rows to display. When `shape="table"`, the `counts` attribute can be used in two ways: 1. `counts="CxR"` = Provides a skeleton table of `C` columns and `R` rows. The default value is `"5x5" 2. `counts="N"` - Provides a skeleton table of `N` columns and 5 rows. When `shape="form"`, the `counts` attribute can be used in two ways: 1. `counts="CxR" - Provides a skeleton form of `C` columns and `R` rows of fields. The default value is `"1x1"`. 2. `counts="N"` - Provides a skeleton form of `N` fields stacked in single columns.
6111
6116
  */
6112
6117
  "counts"?: string;
6118
+ /**
6119
+ * Hides the loading element from screen readers.
6120
+ * @default false
6121
+ */
6122
+ "hideFromScreenReaders"?: boolean;
6113
6123
  /**
6114
6124
  * Styles the component to have a `height` and `width` of `1em`, making it easy to place alongside text.
6115
6125
  */
@@ -6239,12 +6249,12 @@ declare namespace LocalJSX {
6239
6249
  }
6240
6250
  interface Q2Optgroup {
6241
6251
  /**
6242
- * Serves as the group header text.
6252
+ * Determines whether all nested options are disabled.
6243
6253
  * @default false
6244
6254
  */
6245
6255
  "disabled"?: boolean;
6246
6256
  /**
6247
- * Determines whether all nested options are disabled.
6257
+ * Serves as the group header text.
6248
6258
  */
6249
6259
  "label"?: string;
6250
6260
  }