q2-tecton-elements 1.67.2 → 1.68.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 (807) hide show
  1. package/dist/bundle-report.json +22598 -10670
  2. package/dist/cjs/click-elsewhere.q2-option-list.q2-popover.entry.cjs.js.map +1 -1
  3. package/dist/cjs/click-elsewhere_3.cjs.entry.js +46 -32
  4. package/dist/cjs/click-elsewhere_3.cjs.entry.js.map +1 -1
  5. package/dist/cjs/{component-DRAntnCA.js → component-iASoq6gx.js} +9 -3
  6. package/dist/cjs/component-iASoq6gx.js.map +1 -0
  7. package/dist/cjs/{index-YvKoRT-t.js → index-DmGkqdX2.js} +3 -3
  8. package/dist/cjs/index-DmGkqdX2.js.map +1 -0
  9. package/dist/cjs/loader.cjs.js +1 -1
  10. package/dist/cjs/q2-action-group.q2-resize-observer.entry.cjs.js.map +1 -1
  11. package/dist/cjs/q2-action-group_2.cjs.entry.js +2 -2
  12. package/dist/cjs/q2-action-group_2.cjs.entry.js.map +1 -1
  13. package/dist/cjs/q2-action-sheet.cjs.entry.js +109 -4
  14. package/dist/cjs/q2-action-sheet.cjs.entry.js.map +1 -1
  15. package/dist/cjs/q2-action-sheet.entry.cjs.js.map +1 -1
  16. package/dist/cjs/q2-avatar.cjs.entry.js.map +1 -1
  17. package/dist/cjs/q2-avatar.entry.cjs.js.map +1 -1
  18. package/dist/cjs/q2-badge.cjs.entry.js +1 -1
  19. package/dist/cjs/q2-badge.cjs.entry.js.map +1 -1
  20. package/dist/cjs/q2-badge.entry.cjs.js.map +1 -1
  21. package/dist/cjs/q2-btn.q2-loading.entry.cjs.js.map +1 -1
  22. package/dist/cjs/q2-btn_2.cjs.entry.js +1 -1
  23. package/dist/cjs/q2-btn_2.cjs.entry.js.map +1 -1
  24. package/dist/cjs/q2-calendar.cjs.entry.js +6 -3
  25. package/dist/cjs/q2-calendar.cjs.entry.js.map +1 -1
  26. package/dist/cjs/q2-calendar.entry.cjs.js.map +1 -1
  27. package/dist/cjs/q2-card-image.cjs.entry.js +2 -2
  28. package/dist/cjs/q2-card-image.cjs.entry.js.map +1 -1
  29. package/dist/cjs/q2-card-image.entry.cjs.js.map +1 -1
  30. package/dist/cjs/q2-card.cjs.entry.js +1 -1
  31. package/dist/cjs/q2-card.cjs.entry.js.map +1 -1
  32. package/dist/cjs/q2-card.entry.cjs.js.map +1 -1
  33. package/dist/cjs/q2-carousel-pane.cjs.entry.js +3 -3
  34. package/dist/cjs/q2-carousel-pane.cjs.entry.js.map +1 -1
  35. package/dist/cjs/q2-carousel-pane.entry.cjs.js.map +1 -1
  36. package/dist/cjs/q2-carousel.cjs.entry.js +162 -29
  37. package/dist/cjs/q2-carousel.cjs.entry.js.map +1 -1
  38. package/dist/cjs/q2-carousel.entry.cjs.js.map +1 -1
  39. package/dist/cjs/q2-chart-area.cjs.entry.js +1 -1
  40. package/dist/cjs/q2-chart-bar.cjs.entry.js +1 -1
  41. package/dist/cjs/q2-chart-donut.cjs.entry.js +3 -2
  42. package/dist/cjs/q2-chart-donut.cjs.entry.js.map +1 -1
  43. package/dist/cjs/q2-chart-donut.entry.cjs.js.map +1 -1
  44. package/dist/cjs/q2-checkbox-group.cjs.entry.js +2 -2
  45. package/dist/cjs/q2-checkbox-group.cjs.entry.js.map +1 -1
  46. package/dist/cjs/q2-checkbox-group.entry.cjs.js.map +1 -1
  47. package/dist/cjs/q2-checkbox.q2-tag.entry.cjs.js.map +1 -1
  48. package/dist/cjs/q2-checkbox_2.cjs.entry.js +3 -3
  49. package/dist/cjs/q2-checkbox_2.cjs.entry.js.map +1 -1
  50. package/dist/cjs/q2-context.cjs.entry.js +2 -2
  51. package/dist/cjs/q2-context.cjs.entry.js.map +1 -1
  52. package/dist/cjs/q2-context.entry.cjs.js.map +1 -1
  53. package/dist/cjs/q2-currency.cjs.entry.js +2 -3
  54. package/dist/cjs/q2-currency.cjs.entry.js.map +1 -1
  55. package/dist/cjs/q2-currency.entry.cjs.js.map +1 -1
  56. package/dist/cjs/q2-data-table.cjs.entry.js +2 -2
  57. package/dist/cjs/q2-data-table.cjs.entry.js.map +1 -1
  58. package/dist/cjs/q2-data-table.entry.cjs.js.map +1 -1
  59. package/dist/cjs/q2-detail.cjs.entry.js +2 -2
  60. package/dist/cjs/q2-detail.cjs.entry.js.map +1 -1
  61. package/dist/cjs/q2-detail.entry.cjs.js.map +1 -1
  62. package/dist/cjs/q2-dropdown-item.cjs.entry.js +2 -2
  63. package/dist/cjs/q2-dropdown-item.cjs.entry.js.map +1 -1
  64. package/dist/cjs/q2-dropdown-item.entry.cjs.js.map +1 -1
  65. package/dist/cjs/q2-dropdown.cjs.entry.js +3 -5
  66. package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
  67. package/dist/cjs/q2-dropdown.entry.cjs.js.map +1 -1
  68. package/dist/cjs/q2-editable-field.cjs.entry.js +1 -1
  69. package/dist/cjs/q2-editable-field.cjs.entry.js.map +1 -1
  70. package/dist/cjs/q2-editable-field.entry.cjs.js.map +1 -1
  71. package/dist/cjs/q2-example.cjs.entry.js +1 -1
  72. package/dist/cjs/q2-file-picker.cjs.entry.js +1 -1
  73. package/dist/cjs/q2-file-picker.cjs.entry.js.map +1 -1
  74. package/dist/cjs/q2-file-picker.entry.cjs.js.map +1 -1
  75. package/dist/cjs/q2-form.cjs.entry.js +2 -2
  76. package/dist/cjs/q2-form.cjs.entry.js.map +1 -1
  77. package/dist/cjs/q2-form.entry.cjs.js.map +1 -1
  78. package/dist/cjs/q2-formatted-text.cjs.entry.js +1 -1
  79. package/dist/cjs/q2-formatted-text.cjs.entry.js.map +1 -1
  80. package/dist/cjs/q2-formatted-text.entry.cjs.js.map +1 -1
  81. package/dist/cjs/q2-grid-area.cjs.entry.js +1 -1
  82. package/dist/cjs/q2-grid.cjs.entry.js +32 -8
  83. package/dist/cjs/q2-grid.cjs.entry.js.map +1 -1
  84. package/dist/cjs/q2-grid.entry.cjs.js.map +1 -1
  85. package/dist/cjs/q2-icon.cjs.entry.js +1 -1
  86. package/dist/cjs/q2-icon.cjs.entry.js.map +1 -1
  87. package/dist/cjs/q2-icon.entry.cjs.js.map +1 -1
  88. package/dist/cjs/q2-input.cjs.entry.js +8 -5
  89. package/dist/cjs/q2-input.cjs.entry.js.map +1 -1
  90. package/dist/cjs/q2-input.entry.cjs.js.map +1 -1
  91. package/dist/cjs/q2-item.cjs.entry.js +2 -2
  92. package/dist/cjs/q2-item.cjs.entry.js.map +1 -1
  93. package/dist/cjs/q2-item.entry.cjs.js.map +1 -1
  94. package/dist/cjs/q2-legend.cjs.entry.js +2 -3
  95. package/dist/cjs/q2-legend.cjs.entry.js.map +1 -1
  96. package/dist/cjs/q2-legend.entry.cjs.js.map +1 -1
  97. package/dist/cjs/q2-link.q2-list.entry.cjs.js.map +1 -1
  98. package/dist/cjs/q2-link_2.cjs.entry.js +2 -2
  99. package/dist/cjs/q2-link_2.cjs.entry.js.map +1 -1
  100. package/dist/cjs/q2-loc.cjs.entry.js +1 -1
  101. package/dist/cjs/q2-message.cjs.entry.js +3 -3
  102. package/dist/cjs/q2-message.cjs.entry.js.map +1 -1
  103. package/dist/cjs/q2-message.entry.cjs.js.map +1 -1
  104. package/dist/cjs/q2-meter.cjs.entry.js +2 -2
  105. package/dist/cjs/q2-meter.cjs.entry.js.map +1 -1
  106. package/dist/cjs/q2-meter.entry.cjs.js.map +1 -1
  107. package/dist/cjs/q2-modal.cjs.entry.js +3 -3
  108. package/dist/cjs/q2-modal.cjs.entry.js.map +1 -1
  109. package/dist/cjs/q2-modal.entry.cjs.js.map +1 -1
  110. package/dist/cjs/q2-month-picker.cjs.entry.js +1 -1
  111. package/dist/cjs/q2-mutation-observer.cjs.entry.js +1 -1
  112. package/dist/cjs/q2-optgroup.cjs.entry.js +3 -3
  113. package/dist/cjs/q2-optgroup.cjs.entry.js.map +1 -1
  114. package/dist/cjs/q2-optgroup.entry.cjs.js.map +1 -1
  115. package/dist/cjs/q2-option.cjs.entry.js +3 -3
  116. package/dist/cjs/q2-option.cjs.entry.js.map +1 -1
  117. package/dist/cjs/q2-option.entry.cjs.js.map +1 -1
  118. package/dist/cjs/q2-otp.cjs.entry.js +373 -0
  119. package/dist/cjs/q2-otp.cjs.entry.js.map +1 -0
  120. package/dist/cjs/q2-otp.entry.cjs.js.map +1 -0
  121. package/dist/cjs/q2-pagination.cjs.entry.js +4 -4
  122. package/dist/cjs/q2-pagination.cjs.entry.js.map +1 -1
  123. package/dist/cjs/q2-pagination.entry.cjs.js.map +1 -1
  124. package/dist/cjs/q2-pill.cjs.entry.js +24 -15
  125. package/dist/cjs/q2-pill.cjs.entry.js.map +1 -1
  126. package/dist/cjs/q2-pill.entry.cjs.js.map +1 -1
  127. package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
  128. package/dist/cjs/q2-radio-group.cjs.entry.js.map +1 -1
  129. package/dist/cjs/q2-radio-group.entry.cjs.js.map +1 -1
  130. package/dist/cjs/q2-radio.cjs.entry.js +3 -3
  131. package/dist/cjs/q2-radio.cjs.entry.js.map +1 -1
  132. package/dist/cjs/q2-radio.entry.cjs.js.map +1 -1
  133. package/dist/cjs/q2-relative-time.cjs.entry.js +2 -2
  134. package/dist/cjs/q2-section-container.cjs.entry.js +1 -1
  135. package/dist/cjs/q2-section.cjs.entry.js +3 -3
  136. package/dist/cjs/q2-section.cjs.entry.js.map +1 -1
  137. package/dist/cjs/q2-section.entry.cjs.js.map +1 -1
  138. package/dist/cjs/q2-select.cjs.entry.js +1 -1
  139. package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
  140. package/dist/cjs/q2-select.entry.cjs.js.map +1 -1
  141. package/dist/cjs/q2-stepper-pane.cjs.entry.js +3 -3
  142. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +2 -2
  143. package/dist/cjs/q2-stepper-vertical.cjs.entry.js.map +1 -1
  144. package/dist/cjs/q2-stepper-vertical.entry.cjs.js.map +1 -1
  145. package/dist/cjs/q2-stepper.cjs.entry.js +2 -2
  146. package/dist/cjs/q2-stepper.cjs.entry.js.map +1 -1
  147. package/dist/cjs/q2-stepper.entry.cjs.js.map +1 -1
  148. package/dist/cjs/q2-tab-container.cjs.entry.js +3 -3
  149. package/dist/cjs/q2-tab-container.cjs.entry.js.map +1 -1
  150. package/dist/cjs/q2-tab-container.entry.cjs.js.map +1 -1
  151. package/dist/cjs/q2-tab-pane.cjs.entry.js +2 -2
  152. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  153. package/dist/cjs/q2-textarea.cjs.entry.js +1 -1
  154. package/dist/cjs/q2-textarea.cjs.entry.js.map +1 -1
  155. package/dist/cjs/q2-textarea.entry.cjs.js.map +1 -1
  156. package/dist/cjs/q2-toast.cjs.entry.js +1 -1
  157. package/dist/cjs/q2-toast.cjs.entry.js.map +1 -1
  158. package/dist/cjs/q2-toast.entry.cjs.js.map +1 -1
  159. package/dist/cjs/q2-tooltip.cjs.entry.js +124 -5
  160. package/dist/cjs/q2-tooltip.cjs.entry.js.map +1 -1
  161. package/dist/cjs/q2-tooltip.entry.cjs.js.map +1 -1
  162. package/dist/cjs/{sanitize-html-string-CW6y5624.js → sanitize-html-string-D17Pr7-c.js} +21 -4
  163. package/dist/cjs/{sanitize-html-string-CW6y5624.js.map → sanitize-html-string-D17Pr7-c.js.map} +1 -1
  164. package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -2
  165. package/dist/collection/collection-manifest.json +1 -0
  166. package/dist/collection/components/click-elsewhere/click-elsewhere.js +2 -0
  167. package/dist/collection/components/click-elsewhere/click-elsewhere.js.map +1 -1
  168. package/dist/collection/components/q2-action-group/q2-action-group.css +14 -0
  169. package/dist/collection/components/q2-action-sheet/q2-action-sheet.css +16 -0
  170. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js +107 -2
  171. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js.map +1 -1
  172. package/dist/collection/components/q2-avatar/q2-avatar.css +24 -0
  173. package/dist/collection/components/q2-avatar/test/q2-avatar-test.vr.js +61 -0
  174. package/dist/collection/components/q2-avatar/test/q2-avatar-test.vr.js.map +1 -0
  175. package/dist/collection/components/q2-badge/q2-badge.css +30 -0
  176. package/dist/collection/components/q2-badge/test/q2-badge-test.vr.js +34 -0
  177. package/dist/collection/components/q2-badge/test/q2-badge-test.vr.js.map +1 -0
  178. package/dist/collection/components/q2-btn/q2-btn.css +279 -0
  179. package/dist/collection/components/q2-btn/test/q2-btn-test.vr.js +80 -0
  180. package/dist/collection/components/q2-btn/test/q2-btn-test.vr.js.map +1 -0
  181. package/dist/collection/components/q2-calendar/q2-calendar.css +36 -0
  182. package/dist/collection/components/q2-calendar/q2-calendar.js +5 -2
  183. package/dist/collection/components/q2-calendar/q2-calendar.js.map +1 -1
  184. package/dist/collection/components/q2-calendar/test/q2-calendar-test.vr.js +170 -0
  185. package/dist/collection/components/q2-calendar/test/q2-calendar-test.vr.js.map +1 -0
  186. package/dist/collection/components/q2-card/q2-card.css +62 -0
  187. package/dist/collection/components/q2-card/test/q2-card-test.vr.js +72 -0
  188. package/dist/collection/components/q2-card/test/q2-card-test.vr.js.map +1 -0
  189. package/dist/collection/components/q2-card-image/q2-card-image.css +74 -13
  190. package/dist/collection/components/q2-card-image/test/q2-card-image-test.vr.js +152 -0
  191. package/dist/collection/components/q2-card-image/test/q2-card-image-test.vr.js.map +1 -0
  192. package/dist/collection/components/q2-carousel/q2-carousel.css +78 -13
  193. package/dist/collection/components/q2-carousel/q2-carousel.js +241 -27
  194. package/dist/collection/components/q2-carousel/q2-carousel.js.map +1 -1
  195. package/dist/collection/components/q2-carousel/test/q2-carousel-test.vr.js +104 -0
  196. package/dist/collection/components/q2-carousel/test/q2-carousel-test.vr.js.map +1 -0
  197. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.css +26 -1
  198. package/dist/collection/components/q2-chart-area/test/q2-chart-area-test.vr.js +126 -0
  199. package/dist/collection/components/q2-chart-area/test/q2-chart-area-test.vr.js.map +1 -0
  200. package/dist/collection/components/q2-chart-bar/test/q2-chart-bar-test.vr.js +105 -0
  201. package/dist/collection/components/q2-chart-bar/test/q2-chart-bar-test.vr.js.map +1 -0
  202. package/dist/collection/components/q2-chart-donut/q2-chart-donut.css +29 -0
  203. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js +21 -1
  204. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js.map +1 -1
  205. package/dist/collection/components/q2-chart-donut/test/q2-chart-donut-test.vr.js +151 -0
  206. package/dist/collection/components/q2-chart-donut/test/q2-chart-donut-test.vr.js.map +1 -0
  207. package/dist/collection/components/q2-checkbox/q2-checkbox.css +128 -0
  208. package/dist/collection/components/q2-checkbox/test/q2-checkbox-test.vr.js +69 -0
  209. package/dist/collection/components/q2-checkbox/test/q2-checkbox-test.vr.js.map +1 -0
  210. package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.css +21 -0
  211. package/dist/collection/components/q2-checkbox-group/test/q2-checkbox-group-test.vr.js +61 -0
  212. package/dist/collection/components/q2-checkbox-group/test/q2-checkbox-group-test.vr.js.map +1 -0
  213. package/dist/collection/components/q2-context/q2-context.css +16 -0
  214. package/dist/collection/components/q2-context/test/q2-context-test.vr.js +95 -0
  215. package/dist/collection/components/q2-context/test/q2-context-test.vr.js.map +1 -0
  216. package/dist/collection/components/q2-currency/q2-currency.css +31 -0
  217. package/dist/collection/components/q2-currency/q2-currency.js +3 -4
  218. package/dist/collection/components/q2-currency/q2-currency.js.map +1 -1
  219. package/dist/collection/components/q2-currency/test/q2-currency-test.vr.js +79 -0
  220. package/dist/collection/components/q2-currency/test/q2-currency-test.vr.js.map +1 -0
  221. package/dist/collection/components/q2-data-table/q2-data-table.css +51 -0
  222. package/dist/collection/components/q2-data-table/q2-data-table.js +1 -1
  223. package/dist/collection/components/q2-data-table/test/q2-data-table-test.vr.js +79 -0
  224. package/dist/collection/components/q2-data-table/test/q2-data-table-test.vr.js.map +1 -0
  225. package/dist/collection/components/q2-detail/q2-detail.css +42 -0
  226. package/dist/collection/components/q2-detail/q2-detail.js +1 -1
  227. package/dist/collection/components/q2-dropdown/q2-dropdown.css +8 -0
  228. package/dist/collection/components/q2-dropdown/q2-dropdown.js +2 -4
  229. package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
  230. package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.css +11 -0
  231. package/dist/collection/components/q2-editable-field/q2-editable-field.css +5 -0
  232. package/dist/collection/components/q2-editable-field/test/q2-editable-field-test.vr.js +89 -0
  233. package/dist/collection/components/q2-editable-field/test/q2-editable-field-test.vr.js.map +1 -0
  234. package/dist/collection/components/q2-example/q2-example.js +1 -1
  235. package/dist/collection/components/q2-file-picker/q2-file-picker.css +64 -0
  236. package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.vr.js +92 -0
  237. package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.vr.js.map +1 -0
  238. package/dist/collection/components/q2-form/q2-form.css +34 -20
  239. package/dist/collection/components/q2-form/q2-form.js +1 -1
  240. package/dist/collection/components/q2-formatted-text/q2-formatted-text.css +14 -0
  241. package/dist/collection/components/q2-formatted-text/q2-formatted-text.js +1 -1
  242. package/dist/collection/components/q2-formatted-text/test/q2-formatted-text-test.vr.js +55 -0
  243. package/dist/collection/components/q2-formatted-text/test/q2-formatted-text-test.vr.js.map +1 -0
  244. package/dist/collection/components/q2-grid/q2-grid.css +13 -0
  245. package/dist/collection/components/q2-grid/q2-grid.js +31 -7
  246. package/dist/collection/components/q2-grid/q2-grid.js.map +1 -1
  247. package/dist/collection/components/q2-icon/assets/standard.symbol.svg +1 -1
  248. package/dist/collection/components/q2-icon/q2-icon.css +15 -0
  249. package/dist/collection/components/q2-icon/test/q2-icon-test.vr.js +55 -0
  250. package/dist/collection/components/q2-icon/test/q2-icon-test.vr.js.map +1 -0
  251. package/dist/collection/components/q2-input/q2-input.css +104 -0
  252. package/dist/collection/components/q2-input/q2-input.js +6 -3
  253. package/dist/collection/components/q2-input/q2-input.js.map +1 -1
  254. package/dist/collection/components/q2-input/test/q2-input-test.vr.js +97 -0
  255. package/dist/collection/components/q2-input/test/q2-input-test.vr.js.map +1 -0
  256. package/dist/collection/components/q2-item/q2-item.css +28 -0
  257. package/dist/collection/components/q2-item/q2-item.js +1 -1
  258. package/dist/collection/components/q2-legend/q2-legend.css +16 -0
  259. package/dist/collection/components/q2-legend/q2-legend.js +21 -3
  260. package/dist/collection/components/q2-legend/q2-legend.js.map +1 -1
  261. package/dist/collection/components/q2-link/q2-link.css +20 -0
  262. package/dist/collection/components/q2-link/test/q2-link-test.vr.js +70 -0
  263. package/dist/collection/components/q2-link/test/q2-link-test.vr.js.map +1 -0
  264. package/dist/collection/components/q2-list/q2-list.css +14 -0
  265. package/dist/collection/components/q2-list/q2-list.js +1 -1
  266. package/dist/collection/components/q2-list/test/q2-list-test.vr.js +58 -0
  267. package/dist/collection/components/q2-list/test/q2-list-test.vr.js.map +1 -0
  268. package/dist/collection/components/q2-loading/q2-loading.css +9 -0
  269. package/dist/collection/components/q2-message/q2-message.css +29 -1
  270. package/dist/collection/components/q2-message/q2-message.js +1 -1
  271. package/dist/collection/components/q2-message/test/q2-message-test.vr.js +57 -0
  272. package/dist/collection/components/q2-message/test/q2-message-test.vr.js.map +1 -0
  273. package/dist/collection/components/q2-meter/q2-meter.css +40 -0
  274. package/dist/collection/components/q2-meter/q2-meter.js +1 -1
  275. package/dist/collection/components/q2-meter/test/q2-meter-test.vr.js +78 -0
  276. package/dist/collection/components/q2-meter/test/q2-meter-test.vr.js.map +1 -0
  277. package/dist/collection/components/q2-modal/q2-modal.css +21 -0
  278. package/dist/collection/components/q2-modal/q2-modal.js +1 -1
  279. package/dist/collection/components/q2-modal/test/q2-modal-test.vr.js +107 -0
  280. package/dist/collection/components/q2-modal/test/q2-modal-test.vr.js.map +1 -0
  281. package/dist/collection/components/q2-mutation-observer/q2-mutation-observer.js +1 -1
  282. package/dist/collection/components/q2-optgroup/q2-optgroup.css +11 -0
  283. package/dist/collection/components/q2-optgroup/q2-optgroup.js +1 -1
  284. package/dist/collection/components/q2-option/q2-option.css +9 -0
  285. package/dist/collection/components/q2-option/q2-option.js +1 -1
  286. package/dist/collection/components/q2-option/q2-option.js.map +1 -1
  287. package/dist/collection/components/q2-option-list/q2-option-list.css +3 -0
  288. package/dist/collection/components/q2-option-list/q2-option-list.js +37 -28
  289. package/dist/collection/components/q2-option-list/q2-option-list.js.map +1 -1
  290. package/dist/collection/components/q2-otp/q2-otp.css +312 -0
  291. package/dist/collection/components/q2-otp/q2-otp.js +873 -0
  292. package/dist/collection/components/q2-otp/q2-otp.js.map +1 -0
  293. package/dist/collection/components/q2-pagination/q2-pagination.css +22 -0
  294. package/dist/collection/components/q2-pagination/q2-pagination.js +3 -3
  295. package/dist/collection/components/q2-pagination/test/q2-pagination-test.vr.js +145 -0
  296. package/dist/collection/components/q2-pagination/test/q2-pagination-test.vr.js.map +1 -0
  297. package/dist/collection/components/q2-pill/q2-pill.css +53 -0
  298. package/dist/collection/components/q2-pill/q2-pill.js +23 -14
  299. package/dist/collection/components/q2-pill/q2-pill.js.map +1 -1
  300. package/dist/collection/components/q2-pill/test/q2-pill-test.vr.js +110 -0
  301. package/dist/collection/components/q2-pill/test/q2-pill-test.vr.js.map +1 -0
  302. package/dist/collection/components/q2-popover/q2-popover.css +20 -0
  303. package/dist/collection/components/q2-popover/q2-popover.js +5 -2
  304. package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
  305. package/dist/collection/components/q2-radio/q2-radio.css +52 -1
  306. package/dist/collection/components/q2-radio/q2-radio.js +2 -2
  307. package/dist/collection/components/q2-radio/q2-radio.js.map +1 -1
  308. package/dist/collection/components/q2-radio/test/q2-radio-test.vr.js +73 -0
  309. package/dist/collection/components/q2-radio/test/q2-radio-test.vr.js.map +1 -0
  310. package/dist/collection/components/q2-radio-group/q2-radio-group.css +22 -0
  311. package/dist/collection/components/q2-radio-group/test/q2-radio-group-test.vr.js +99 -0
  312. package/dist/collection/components/q2-radio-group/test/q2-radio-group-test.vr.js.map +1 -0
  313. package/dist/collection/components/q2-relative-time/q2-relative-time.js +1 -1
  314. package/dist/collection/components/q2-resize-observer/q2-resize-observer.js +1 -1
  315. package/dist/collection/components/q2-section/q2-section.css +26 -0
  316. package/dist/collection/components/q2-section/q2-section.js +2 -2
  317. package/dist/collection/components/q2-section/test/q2-section-test.vr.js +68 -0
  318. package/dist/collection/components/q2-section/test/q2-section-test.vr.js.map +1 -0
  319. package/dist/collection/components/q2-select/q2-select.css +17 -0
  320. package/dist/collection/components/q2-select/test/q2-select-test.vr.js +107 -0
  321. package/dist/collection/components/q2-select/test/q2-select-test.vr.js.map +1 -0
  322. package/dist/collection/components/q2-stepper/q2-stepper.css +36 -0
  323. package/dist/collection/components/q2-stepper/q2-stepper.js +1 -1
  324. package/dist/collection/components/q2-stepper/test/q2-stepper-test.vr.js +86 -0
  325. package/dist/collection/components/q2-stepper/test/q2-stepper-test.vr.js.map +1 -0
  326. package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js +1 -1
  327. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.css +31 -0
  328. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +1 -1
  329. package/dist/collection/components/q2-stepper-vertical/test/q2-stepper-vertical-test.vr.js +97 -0
  330. package/dist/collection/components/q2-stepper-vertical/test/q2-stepper-vertical-test.vr.js.map +1 -0
  331. package/dist/collection/components/q2-tab-container/q2-tab-container.css +38 -0
  332. package/dist/collection/components/q2-tab-container/q2-tab-container.js +1 -1
  333. package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.vr.js +78 -0
  334. package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.vr.js.map +1 -0
  335. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
  336. package/dist/collection/components/q2-tag/q2-tag.css +30 -1
  337. package/dist/collection/components/q2-tag/q2-tag.js +1 -1
  338. package/dist/collection/components/q2-tag/test/q2-tag-test.vr.js +83 -0
  339. package/dist/collection/components/q2-tag/test/q2-tag-test.vr.js.map +1 -0
  340. package/dist/collection/components/q2-textarea/q2-textarea.css +80 -0
  341. package/dist/collection/components/q2-textarea/test/q2-textarea-test.vr.js +102 -0
  342. package/dist/collection/components/q2-textarea/test/q2-textarea-test.vr.js.map +1 -0
  343. package/dist/collection/components/q2-toast/q2-toast.css +15 -0
  344. package/dist/collection/components/q2-tooltip/q2-tooltip.css +31 -0
  345. package/dist/collection/components/q2-tooltip/q2-tooltip.js +135 -4
  346. package/dist/collection/components/q2-tooltip/q2-tooltip.js.map +1 -1
  347. package/dist/collection/components/q2-tooltip/test/q2-tooltip-test.vr.js +76 -0
  348. package/dist/collection/components/q2-tooltip/test/q2-tooltip-test.vr.js.map +1 -0
  349. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
  350. package/dist/collection/utils/component.js +7 -1
  351. package/dist/collection/utils/component.js.map +1 -1
  352. package/dist/collection/utils/index.js +1 -1
  353. package/dist/collection/utils/index.js.map +1 -1
  354. package/dist/collection/utils/sanitize-html-string.js +19 -2
  355. package/dist/collection/utils/sanitize-html-string.js.map +1 -1
  356. package/dist/collection/utils/test/vr-helpers.js +98 -0
  357. package/dist/collection/utils/test/vr-helpers.js.map +1 -0
  358. package/dist/components/click-elsewhere2.js +2 -0
  359. package/dist/components/click-elsewhere2.js.map +1 -1
  360. package/dist/components/component.js +7 -1
  361. package/dist/components/component.js.map +1 -1
  362. package/dist/components/index.js +2 -0
  363. package/dist/components/index.js.map +1 -1
  364. package/dist/components/index2.js +1 -1
  365. package/dist/components/index2.js.map +1 -1
  366. package/dist/components/q2-action-group2.js.map +1 -1
  367. package/dist/components/q2-action-sheet.js +107 -2
  368. package/dist/components/q2-action-sheet.js.map +1 -1
  369. package/dist/components/q2-avatar2.js.map +1 -1
  370. package/dist/components/q2-badge2.js.map +1 -1
  371. package/dist/components/q2-btn2.js.map +1 -1
  372. package/dist/components/q2-calendar.js +5 -2
  373. package/dist/components/q2-calendar.js.map +1 -1
  374. package/dist/components/q2-card-image.js +1 -1
  375. package/dist/components/q2-card-image.js.map +1 -1
  376. package/dist/components/q2-card.js.map +1 -1
  377. package/dist/components/q2-carousel-pane.js +1 -135
  378. package/dist/components/q2-carousel-pane.js.map +1 -1
  379. package/dist/components/q2-carousel-pane2.js +140 -0
  380. package/dist/components/q2-carousel-pane2.js.map +1 -0
  381. package/dist/components/q2-carousel.js +173 -29
  382. package/dist/components/q2-carousel.js.map +1 -1
  383. package/dist/components/q2-chart-donut.js +3 -1
  384. package/dist/components/q2-chart-donut.js.map +1 -1
  385. package/dist/components/q2-checkbox-group.js.map +1 -1
  386. package/dist/components/q2-checkbox2.js.map +1 -1
  387. package/dist/components/q2-context.js +1 -1
  388. package/dist/components/q2-context.js.map +1 -1
  389. package/dist/components/q2-currency.js +3 -4
  390. package/dist/components/q2-currency.js.map +1 -1
  391. package/dist/components/q2-data-table.js +1 -1
  392. package/dist/components/q2-data-table.js.map +1 -1
  393. package/dist/components/q2-detail.js +1 -1
  394. package/dist/components/q2-detail.js.map +1 -1
  395. package/dist/components/q2-dropdown-item2.js.map +1 -1
  396. package/dist/components/q2-dropdown.js +2 -4
  397. package/dist/components/q2-dropdown.js.map +1 -1
  398. package/dist/components/q2-editable-field.js.map +1 -1
  399. package/dist/components/q2-example.js +1 -1
  400. package/dist/components/q2-file-picker.js.map +1 -1
  401. package/dist/components/q2-form.js +2 -2
  402. package/dist/components/q2-form.js.map +1 -1
  403. package/dist/components/q2-formatted-text.js +1 -1
  404. package/dist/components/q2-formatted-text.js.map +1 -1
  405. package/dist/components/q2-grid.js +32 -8
  406. package/dist/components/q2-grid.js.map +1 -1
  407. package/dist/components/q2-icon2.js.map +1 -1
  408. package/dist/components/q2-input2.js +7 -4
  409. package/dist/components/q2-input2.js.map +1 -1
  410. package/dist/components/q2-item2.js +1 -1
  411. package/dist/components/q2-item2.js.map +1 -1
  412. package/dist/components/q2-legend2.js +3 -3
  413. package/dist/components/q2-legend2.js.map +1 -1
  414. package/dist/components/q2-link2.js.map +1 -1
  415. package/dist/components/q2-list2.js +1 -1
  416. package/dist/components/q2-list2.js.map +1 -1
  417. package/dist/components/q2-loading2.js.map +1 -1
  418. package/dist/components/q2-message2.js +2 -2
  419. package/dist/components/q2-message2.js.map +1 -1
  420. package/dist/components/q2-meter.js +1 -1
  421. package/dist/components/q2-meter.js.map +1 -1
  422. package/dist/components/q2-modal.js +1 -1
  423. package/dist/components/q2-modal.js.map +1 -1
  424. package/dist/components/q2-mutation-observer.js +1 -1
  425. package/dist/components/q2-optgroup2.js +1 -1
  426. package/dist/components/q2-optgroup2.js.map +1 -1
  427. package/dist/components/q2-option-list2.js +37 -28
  428. package/dist/components/q2-option-list2.js.map +1 -1
  429. package/dist/components/q2-option2.js +1 -1
  430. package/dist/components/q2-option2.js.map +1 -1
  431. package/dist/components/q2-otp.d.ts +11 -0
  432. package/dist/components/q2-otp.js +439 -0
  433. package/dist/components/q2-otp.js.map +1 -0
  434. package/dist/components/q2-pagination.js +3 -3
  435. package/dist/components/q2-pagination.js.map +1 -1
  436. package/dist/components/q2-pill.js +23 -14
  437. package/dist/components/q2-pill.js.map +1 -1
  438. package/dist/components/q2-popover2.js +5 -2
  439. package/dist/components/q2-popover2.js.map +1 -1
  440. package/dist/components/q2-radio-group.js.map +1 -1
  441. package/dist/components/q2-radio.js +2 -2
  442. package/dist/components/q2-radio.js.map +1 -1
  443. package/dist/components/q2-relative-time.js +1 -1
  444. package/dist/components/q2-resize-observer2.js +1 -1
  445. package/dist/components/q2-section.js +2 -2
  446. package/dist/components/q2-section.js.map +1 -1
  447. package/dist/components/q2-select2.js.map +1 -1
  448. package/dist/components/q2-stepper-pane.js +1 -1
  449. package/dist/components/q2-stepper-vertical.js +1 -1
  450. package/dist/components/q2-stepper-vertical.js.map +1 -1
  451. package/dist/components/q2-stepper.js +1 -1
  452. package/dist/components/q2-stepper.js.map +1 -1
  453. package/dist/components/q2-tab-container.js +1 -1
  454. package/dist/components/q2-tab-container.js.map +1 -1
  455. package/dist/components/q2-tab-pane.js +1 -1
  456. package/dist/components/q2-tag2.js +2 -2
  457. package/dist/components/q2-tag2.js.map +1 -1
  458. package/dist/components/q2-textarea.js.map +1 -1
  459. package/dist/components/q2-toast.js.map +1 -1
  460. package/dist/components/q2-tooltip2.js +124 -5
  461. package/dist/components/q2-tooltip2.js.map +1 -1
  462. package/dist/components/sanitize-html-string.js +19 -2
  463. package/dist/components/sanitize-html-string.js.map +1 -1
  464. package/dist/components/tecton-tab-pane.js +2 -2
  465. package/dist/esm/click-elsewhere.q2-option-list.q2-popover.entry.js.map +1 -1
  466. package/dist/esm/click-elsewhere_3.entry.js +46 -32
  467. package/dist/esm/click-elsewhere_3.entry.js.map +1 -1
  468. package/dist/esm/{component-DVxzK3WH.js → component-DaQM9u3s.js} +9 -3
  469. package/dist/esm/component-DaQM9u3s.js.map +1 -0
  470. package/dist/esm/{index-C4PILj1_.js → index-C5gj0T_3.js} +4 -4
  471. package/dist/esm/index-C5gj0T_3.js.map +1 -0
  472. package/dist/esm/loader.js +1 -1
  473. package/dist/esm/q2-action-group.q2-resize-observer.entry.js.map +1 -1
  474. package/dist/esm/q2-action-group_2.entry.js +2 -2
  475. package/dist/esm/q2-action-group_2.entry.js.map +1 -1
  476. package/dist/esm/q2-action-sheet.entry.js +109 -4
  477. package/dist/esm/q2-action-sheet.entry.js.map +1 -1
  478. package/dist/esm/q2-avatar.entry.js.map +1 -1
  479. package/dist/esm/q2-badge.entry.js +1 -1
  480. package/dist/esm/q2-badge.entry.js.map +1 -1
  481. package/dist/esm/q2-btn.q2-loading.entry.js.map +1 -1
  482. package/dist/esm/q2-btn_2.entry.js +1 -1
  483. package/dist/esm/q2-btn_2.entry.js.map +1 -1
  484. package/dist/esm/q2-calendar.entry.js +6 -3
  485. package/dist/esm/q2-calendar.entry.js.map +1 -1
  486. package/dist/esm/q2-card-image.entry.js +2 -2
  487. package/dist/esm/q2-card-image.entry.js.map +1 -1
  488. package/dist/esm/q2-card.entry.js +1 -1
  489. package/dist/esm/q2-card.entry.js.map +1 -1
  490. package/dist/esm/q2-carousel-pane.entry.js +3 -3
  491. package/dist/esm/q2-carousel-pane.entry.js.map +1 -1
  492. package/dist/esm/q2-carousel.entry.js +162 -29
  493. package/dist/esm/q2-carousel.entry.js.map +1 -1
  494. package/dist/esm/q2-chart-area.entry.js +1 -1
  495. package/dist/esm/q2-chart-bar.entry.js +1 -1
  496. package/dist/esm/q2-chart-donut.entry.js +3 -2
  497. package/dist/esm/q2-chart-donut.entry.js.map +1 -1
  498. package/dist/esm/q2-checkbox-group.entry.js +2 -2
  499. package/dist/esm/q2-checkbox-group.entry.js.map +1 -1
  500. package/dist/esm/q2-checkbox.q2-tag.entry.js.map +1 -1
  501. package/dist/esm/q2-checkbox_2.entry.js +3 -3
  502. package/dist/esm/q2-checkbox_2.entry.js.map +1 -1
  503. package/dist/esm/q2-context.entry.js +2 -2
  504. package/dist/esm/q2-context.entry.js.map +1 -1
  505. package/dist/esm/q2-currency.entry.js +3 -4
  506. package/dist/esm/q2-currency.entry.js.map +1 -1
  507. package/dist/esm/q2-data-table.entry.js +2 -2
  508. package/dist/esm/q2-data-table.entry.js.map +1 -1
  509. package/dist/esm/q2-detail.entry.js +2 -2
  510. package/dist/esm/q2-detail.entry.js.map +1 -1
  511. package/dist/esm/q2-dropdown-item.entry.js +2 -2
  512. package/dist/esm/q2-dropdown-item.entry.js.map +1 -1
  513. package/dist/esm/q2-dropdown.entry.js +3 -5
  514. package/dist/esm/q2-dropdown.entry.js.map +1 -1
  515. package/dist/esm/q2-editable-field.entry.js +1 -1
  516. package/dist/esm/q2-editable-field.entry.js.map +1 -1
  517. package/dist/esm/q2-example.entry.js +1 -1
  518. package/dist/esm/q2-file-picker.entry.js +1 -1
  519. package/dist/esm/q2-file-picker.entry.js.map +1 -1
  520. package/dist/esm/q2-form.entry.js +2 -2
  521. package/dist/esm/q2-form.entry.js.map +1 -1
  522. package/dist/esm/q2-formatted-text.entry.js +1 -1
  523. package/dist/esm/q2-formatted-text.entry.js.map +1 -1
  524. package/dist/esm/q2-grid-area.entry.js +1 -1
  525. package/dist/esm/q2-grid.entry.js +33 -9
  526. package/dist/esm/q2-grid.entry.js.map +1 -1
  527. package/dist/esm/q2-icon.entry.js +1 -1
  528. package/dist/esm/q2-icon.entry.js.map +1 -1
  529. package/dist/esm/q2-input.entry.js +8 -5
  530. package/dist/esm/q2-input.entry.js.map +1 -1
  531. package/dist/esm/q2-item.entry.js +2 -2
  532. package/dist/esm/q2-item.entry.js.map +1 -1
  533. package/dist/esm/q2-legend.entry.js +2 -3
  534. package/dist/esm/q2-legend.entry.js.map +1 -1
  535. package/dist/esm/q2-link.q2-list.entry.js.map +1 -1
  536. package/dist/esm/q2-link_2.entry.js +2 -2
  537. package/dist/esm/q2-link_2.entry.js.map +1 -1
  538. package/dist/esm/q2-loc.entry.js +1 -1
  539. package/dist/esm/q2-message.entry.js +3 -3
  540. package/dist/esm/q2-message.entry.js.map +1 -1
  541. package/dist/esm/q2-meter.entry.js +2 -2
  542. package/dist/esm/q2-meter.entry.js.map +1 -1
  543. package/dist/esm/q2-modal.entry.js +3 -3
  544. package/dist/esm/q2-modal.entry.js.map +1 -1
  545. package/dist/esm/q2-month-picker.entry.js +1 -1
  546. package/dist/esm/q2-mutation-observer.entry.js +1 -1
  547. package/dist/esm/q2-optgroup.entry.js +3 -3
  548. package/dist/esm/q2-optgroup.entry.js.map +1 -1
  549. package/dist/esm/q2-option.entry.js +3 -3
  550. package/dist/esm/q2-option.entry.js.map +1 -1
  551. package/dist/esm/q2-otp.entry.js +371 -0
  552. package/dist/esm/q2-otp.entry.js.map +1 -0
  553. package/dist/esm/q2-pagination.entry.js +4 -4
  554. package/dist/esm/q2-pagination.entry.js.map +1 -1
  555. package/dist/esm/q2-pill.entry.js +24 -15
  556. package/dist/esm/q2-pill.entry.js.map +1 -1
  557. package/dist/esm/q2-radio-group.entry.js +1 -1
  558. package/dist/esm/q2-radio-group.entry.js.map +1 -1
  559. package/dist/esm/q2-radio.entry.js +3 -3
  560. package/dist/esm/q2-radio.entry.js.map +1 -1
  561. package/dist/esm/q2-relative-time.entry.js +2 -2
  562. package/dist/esm/q2-section-container.entry.js +1 -1
  563. package/dist/esm/q2-section.entry.js +3 -3
  564. package/dist/esm/q2-section.entry.js.map +1 -1
  565. package/dist/esm/q2-select.entry.js +1 -1
  566. package/dist/esm/q2-select.entry.js.map +1 -1
  567. package/dist/esm/q2-stepper-pane.entry.js +3 -3
  568. package/dist/esm/q2-stepper-vertical.entry.js +2 -2
  569. package/dist/esm/q2-stepper-vertical.entry.js.map +1 -1
  570. package/dist/esm/q2-stepper.entry.js +2 -2
  571. package/dist/esm/q2-stepper.entry.js.map +1 -1
  572. package/dist/esm/q2-tab-container.entry.js +3 -3
  573. package/dist/esm/q2-tab-container.entry.js.map +1 -1
  574. package/dist/esm/q2-tab-pane.entry.js +2 -2
  575. package/dist/esm/q2-tecton-elements.js +1 -1
  576. package/dist/esm/q2-textarea.entry.js +1 -1
  577. package/dist/esm/q2-textarea.entry.js.map +1 -1
  578. package/dist/esm/q2-toast.entry.js +1 -1
  579. package/dist/esm/q2-toast.entry.js.map +1 -1
  580. package/dist/esm/q2-tooltip.entry.js +124 -5
  581. package/dist/esm/q2-tooltip.entry.js.map +1 -1
  582. package/dist/esm/{sanitize-html-string-B35VmRc9.js → sanitize-html-string-DPHNpMWE.js} +21 -4
  583. package/dist/{q2-tecton-elements/sanitize-html-string-B35VmRc9.js.map → esm/sanitize-html-string-DPHNpMWE.js.map} +1 -1
  584. package/dist/esm/tecton-tab-pane.entry.js +2 -2
  585. package/dist/playwright.config.js +12 -0
  586. package/dist/playwright.config.js.map +1 -0
  587. package/dist/q2-tecton-elements/assets/standard.symbol.svg +1 -1
  588. package/dist/q2-tecton-elements/click-elsewhere.q2-option-list.q2-popover.entry.esm.js.map +1 -1
  589. package/dist/q2-tecton-elements/click-elsewhere_3.entry.js +44 -35
  590. package/dist/q2-tecton-elements/click-elsewhere_3.entry.js.map +1 -1
  591. package/dist/q2-tecton-elements/component-DaQM9u3s.js +46 -0
  592. package/dist/q2-tecton-elements/component-DaQM9u3s.js.map +1 -0
  593. package/dist/q2-tecton-elements/{index-C4PILj1_.js → index-C5gj0T_3.js} +4 -4
  594. package/dist/q2-tecton-elements/index-C5gj0T_3.js.map +1 -0
  595. package/dist/q2-tecton-elements/q2-action-group.q2-resize-observer.entry.esm.js.map +1 -1
  596. package/dist/q2-tecton-elements/q2-action-group_2.entry.js +2 -2
  597. package/dist/q2-tecton-elements/q2-action-group_2.entry.js.map +1 -1
  598. package/dist/q2-tecton-elements/q2-action-sheet.entry.esm.js.map +1 -1
  599. package/dist/q2-tecton-elements/q2-action-sheet.entry.js +166 -70
  600. package/dist/q2-tecton-elements/q2-action-sheet.entry.js.map +1 -1
  601. package/dist/q2-tecton-elements/q2-avatar.entry.esm.js.map +1 -1
  602. package/dist/q2-tecton-elements/q2-avatar.entry.js.map +1 -1
  603. package/dist/q2-tecton-elements/q2-badge.entry.esm.js.map +1 -1
  604. package/dist/q2-tecton-elements/q2-badge.entry.js +1 -1
  605. package/dist/q2-tecton-elements/q2-badge.entry.js.map +1 -1
  606. package/dist/q2-tecton-elements/q2-btn.q2-loading.entry.esm.js.map +1 -1
  607. package/dist/q2-tecton-elements/q2-btn_2.entry.js +1 -1
  608. package/dist/q2-tecton-elements/q2-btn_2.entry.js.map +1 -1
  609. package/dist/q2-tecton-elements/q2-calendar.entry.esm.js.map +1 -1
  610. package/dist/q2-tecton-elements/q2-calendar.entry.js +4 -4
  611. package/dist/q2-tecton-elements/q2-calendar.entry.js.map +1 -1
  612. package/dist/q2-tecton-elements/q2-card-image.entry.esm.js.map +1 -1
  613. package/dist/q2-tecton-elements/q2-card-image.entry.js +2 -2
  614. package/dist/q2-tecton-elements/q2-card-image.entry.js.map +1 -1
  615. package/dist/q2-tecton-elements/q2-card.entry.esm.js.map +1 -1
  616. package/dist/q2-tecton-elements/q2-card.entry.js +1 -1
  617. package/dist/q2-tecton-elements/q2-card.entry.js.map +1 -1
  618. package/dist/q2-tecton-elements/q2-carousel-pane.entry.esm.js.map +1 -1
  619. package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +6 -6
  620. package/dist/q2-tecton-elements/q2-carousel-pane.entry.js.map +1 -1
  621. package/dist/q2-tecton-elements/q2-carousel.entry.esm.js.map +1 -1
  622. package/dist/q2-tecton-elements/q2-carousel.entry.js +402 -271
  623. package/dist/q2-tecton-elements/q2-carousel.entry.js.map +1 -1
  624. package/dist/q2-tecton-elements/q2-chart-area.entry.js +1 -1
  625. package/dist/q2-tecton-elements/q2-chart-bar.entry.js +1 -1
  626. package/dist/q2-tecton-elements/q2-chart-donut.entry.esm.js.map +1 -1
  627. package/dist/q2-tecton-elements/q2-chart-donut.entry.js +18 -16
  628. package/dist/q2-tecton-elements/q2-chart-donut.entry.js.map +1 -1
  629. package/dist/q2-tecton-elements/q2-checkbox-group.entry.esm.js.map +1 -1
  630. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +2 -2
  631. package/dist/q2-tecton-elements/q2-checkbox-group.entry.js.map +1 -1
  632. package/dist/q2-tecton-elements/q2-checkbox.q2-tag.entry.esm.js.map +1 -1
  633. package/dist/q2-tecton-elements/q2-checkbox_2.entry.js +7 -7
  634. package/dist/q2-tecton-elements/q2-checkbox_2.entry.js.map +1 -1
  635. package/dist/q2-tecton-elements/q2-context.entry.esm.js.map +1 -1
  636. package/dist/q2-tecton-elements/q2-context.entry.js +2 -2
  637. package/dist/q2-tecton-elements/q2-context.entry.js.map +1 -1
  638. package/dist/q2-tecton-elements/q2-currency.entry.esm.js.map +1 -1
  639. package/dist/q2-tecton-elements/q2-currency.entry.js +34 -33
  640. package/dist/q2-tecton-elements/q2-currency.entry.js.map +1 -1
  641. package/dist/q2-tecton-elements/q2-data-table.entry.esm.js.map +1 -1
  642. package/dist/q2-tecton-elements/q2-data-table.entry.js +4 -4
  643. package/dist/q2-tecton-elements/q2-data-table.entry.js.map +1 -1
  644. package/dist/q2-tecton-elements/q2-detail.entry.esm.js.map +1 -1
  645. package/dist/q2-tecton-elements/q2-detail.entry.js +4 -4
  646. package/dist/q2-tecton-elements/q2-detail.entry.js.map +1 -1
  647. package/dist/q2-tecton-elements/q2-dropdown-item.entry.esm.js.map +1 -1
  648. package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +2 -2
  649. package/dist/q2-tecton-elements/q2-dropdown-item.entry.js.map +1 -1
  650. package/dist/q2-tecton-elements/q2-dropdown.entry.esm.js.map +1 -1
  651. package/dist/q2-tecton-elements/q2-dropdown.entry.js +18 -19
  652. package/dist/q2-tecton-elements/q2-dropdown.entry.js.map +1 -1
  653. package/dist/q2-tecton-elements/q2-editable-field.entry.esm.js.map +1 -1
  654. package/dist/q2-tecton-elements/q2-editable-field.entry.js +1 -1
  655. package/dist/q2-tecton-elements/q2-editable-field.entry.js.map +1 -1
  656. package/dist/q2-tecton-elements/q2-example.entry.js +1 -1
  657. package/dist/q2-tecton-elements/q2-file-picker.entry.esm.js.map +1 -1
  658. package/dist/q2-tecton-elements/q2-file-picker.entry.js +1 -1
  659. package/dist/q2-tecton-elements/q2-file-picker.entry.js.map +1 -1
  660. package/dist/q2-tecton-elements/q2-form.entry.esm.js.map +1 -1
  661. package/dist/q2-tecton-elements/q2-form.entry.js +9 -9
  662. package/dist/q2-tecton-elements/q2-form.entry.js.map +1 -1
  663. package/dist/q2-tecton-elements/q2-formatted-text.entry.esm.js.map +1 -1
  664. package/dist/q2-tecton-elements/q2-formatted-text.entry.js +2 -2
  665. package/dist/q2-tecton-elements/q2-formatted-text.entry.js.map +1 -1
  666. package/dist/q2-tecton-elements/q2-grid-area.entry.js +1 -1
  667. package/dist/q2-tecton-elements/q2-grid.entry.esm.js.map +1 -1
  668. package/dist/q2-tecton-elements/q2-grid.entry.js +39 -14
  669. package/dist/q2-tecton-elements/q2-grid.entry.js.map +1 -1
  670. package/dist/q2-tecton-elements/q2-icon.entry.esm.js.map +1 -1
  671. package/dist/q2-tecton-elements/q2-icon.entry.js +52 -52
  672. package/dist/q2-tecton-elements/q2-icon.entry.js.map +1 -1
  673. package/dist/q2-tecton-elements/q2-input.entry.esm.js.map +1 -1
  674. package/dist/q2-tecton-elements/q2-input.entry.js +10 -6
  675. package/dist/q2-tecton-elements/q2-input.entry.js.map +1 -1
  676. package/dist/q2-tecton-elements/q2-item.entry.esm.js.map +1 -1
  677. package/dist/q2-tecton-elements/q2-item.entry.js +14 -14
  678. package/dist/q2-tecton-elements/q2-item.entry.js.map +1 -1
  679. package/dist/q2-tecton-elements/q2-legend.entry.esm.js.map +1 -1
  680. package/dist/q2-tecton-elements/q2-legend.entry.js +4 -5
  681. package/dist/q2-tecton-elements/q2-legend.entry.js.map +1 -1
  682. package/dist/q2-tecton-elements/q2-link.q2-list.entry.esm.js.map +1 -1
  683. package/dist/q2-tecton-elements/q2-link_2.entry.js +7 -7
  684. package/dist/q2-tecton-elements/q2-link_2.entry.js.map +1 -1
  685. package/dist/q2-tecton-elements/q2-loc.entry.js +1 -1
  686. package/dist/q2-tecton-elements/q2-message.entry.esm.js.map +1 -1
  687. package/dist/q2-tecton-elements/q2-message.entry.js +28 -28
  688. package/dist/q2-tecton-elements/q2-message.entry.js.map +1 -1
  689. package/dist/q2-tecton-elements/q2-meter.entry.esm.js.map +1 -1
  690. package/dist/q2-tecton-elements/q2-meter.entry.js +8 -8
  691. package/dist/q2-tecton-elements/q2-meter.entry.js.map +1 -1
  692. package/dist/q2-tecton-elements/q2-modal.entry.esm.js.map +1 -1
  693. package/dist/q2-tecton-elements/q2-modal.entry.js +53 -53
  694. package/dist/q2-tecton-elements/q2-modal.entry.js.map +1 -1
  695. package/dist/q2-tecton-elements/q2-month-picker.entry.js +1 -1
  696. package/dist/q2-tecton-elements/q2-mutation-observer.entry.js +1 -1
  697. package/dist/q2-tecton-elements/q2-optgroup.entry.esm.js.map +1 -1
  698. package/dist/q2-tecton-elements/q2-optgroup.entry.js +6 -6
  699. package/dist/q2-tecton-elements/q2-optgroup.entry.js.map +1 -1
  700. package/dist/q2-tecton-elements/q2-option.entry.esm.js.map +1 -1
  701. package/dist/q2-tecton-elements/q2-option.entry.js +3 -3
  702. package/dist/q2-tecton-elements/q2-option.entry.js.map +1 -1
  703. package/dist/q2-tecton-elements/q2-otp.entry.esm.js.map +1 -0
  704. package/dist/q2-tecton-elements/q2-otp.entry.js +453 -0
  705. package/dist/q2-tecton-elements/q2-otp.entry.js.map +1 -0
  706. package/dist/q2-tecton-elements/q2-pagination.entry.esm.js.map +1 -1
  707. package/dist/q2-tecton-elements/q2-pagination.entry.js +29 -29
  708. package/dist/q2-tecton-elements/q2-pagination.entry.js.map +1 -1
  709. package/dist/q2-tecton-elements/q2-pill.entry.esm.js.map +1 -1
  710. package/dist/q2-tecton-elements/q2-pill.entry.js +43 -28
  711. package/dist/q2-tecton-elements/q2-pill.entry.js.map +1 -1
  712. package/dist/q2-tecton-elements/q2-radio-group.entry.esm.js.map +1 -1
  713. package/dist/q2-tecton-elements/q2-radio-group.entry.js +1 -1
  714. package/dist/q2-tecton-elements/q2-radio-group.entry.js.map +1 -1
  715. package/dist/q2-tecton-elements/q2-radio.entry.esm.js.map +1 -1
  716. package/dist/q2-tecton-elements/q2-radio.entry.js +10 -10
  717. package/dist/q2-tecton-elements/q2-radio.entry.js.map +1 -1
  718. package/dist/q2-tecton-elements/q2-relative-time.entry.js +2 -2
  719. package/dist/q2-tecton-elements/q2-section-container.entry.js +1 -1
  720. package/dist/q2-tecton-elements/q2-section.entry.esm.js.map +1 -1
  721. package/dist/q2-tecton-elements/q2-section.entry.js +21 -21
  722. package/dist/q2-tecton-elements/q2-section.entry.js.map +1 -1
  723. package/dist/q2-tecton-elements/q2-select.entry.esm.js.map +1 -1
  724. package/dist/q2-tecton-elements/q2-select.entry.js +1 -1
  725. package/dist/q2-tecton-elements/q2-select.entry.js.map +1 -1
  726. package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +10 -10
  727. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.esm.js.map +1 -1
  728. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +5 -5
  729. package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js.map +1 -1
  730. package/dist/q2-tecton-elements/q2-stepper.entry.esm.js.map +1 -1
  731. package/dist/q2-tecton-elements/q2-stepper.entry.js +33 -33
  732. package/dist/q2-tecton-elements/q2-stepper.entry.js.map +1 -1
  733. package/dist/q2-tecton-elements/q2-tab-container.entry.esm.js.map +1 -1
  734. package/dist/q2-tecton-elements/q2-tab-container.entry.js +14 -14
  735. package/dist/q2-tecton-elements/q2-tab-container.entry.js.map +1 -1
  736. package/dist/q2-tecton-elements/q2-tab-pane.entry.js +6 -6
  737. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  738. package/dist/q2-tecton-elements/q2-textarea.entry.esm.js.map +1 -1
  739. package/dist/q2-tecton-elements/q2-textarea.entry.js +1 -1
  740. package/dist/q2-tecton-elements/q2-textarea.entry.js.map +1 -1
  741. package/dist/q2-tecton-elements/q2-toast.entry.esm.js.map +1 -1
  742. package/dist/q2-tecton-elements/q2-toast.entry.js +1 -1
  743. package/dist/q2-tecton-elements/q2-toast.entry.js.map +1 -1
  744. package/dist/q2-tecton-elements/q2-tooltip.entry.esm.js.map +1 -1
  745. package/dist/q2-tecton-elements/q2-tooltip.entry.js +136 -20
  746. package/dist/q2-tecton-elements/q2-tooltip.entry.js.map +1 -1
  747. package/dist/q2-tecton-elements/{sanitize-html-string-B35VmRc9.js → sanitize-html-string-DPHNpMWE.js} +147 -142
  748. package/dist/{esm/sanitize-html-string-B35VmRc9.js.map → q2-tecton-elements/sanitize-html-string-DPHNpMWE.js.map} +1 -1
  749. package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +6 -6
  750. package/dist/types/builds/q2e/development/tecton/tecton/packages/q2-tecton-elements/.stencil/playwright.config.d.ts +2 -0
  751. package/dist/types/components/q2-action-sheet/q2-action-sheet.d.ts +22 -0
  752. package/dist/types/components/q2-avatar/test/q2-avatar-test.vr.d.ts +1 -0
  753. package/dist/types/components/q2-badge/test/q2-badge-test.vr.d.ts +1 -0
  754. package/dist/types/components/q2-btn/test/q2-btn-test.vr.d.ts +1 -0
  755. package/dist/types/components/q2-calendar/test/q2-calendar-test.vr.d.ts +1 -0
  756. package/dist/types/components/q2-card/test/q2-card-test.vr.d.ts +1 -0
  757. package/dist/types/components/q2-card-image/test/q2-card-image-test.vr.d.ts +1 -0
  758. package/dist/types/components/q2-carousel/q2-carousel.d.ts +29 -0
  759. package/dist/types/components/q2-carousel/test/q2-carousel-test.vr.d.ts +1 -0
  760. package/dist/types/components/q2-chart-area/test/q2-chart-area-test.vr.d.ts +1 -0
  761. package/dist/types/components/q2-chart-bar/test/q2-chart-bar-test.vr.d.ts +1 -0
  762. package/dist/types/components/q2-chart-donut/q2-chart-donut.d.ts +2 -0
  763. package/dist/types/components/q2-chart-donut/test/q2-chart-donut-test.vr.d.ts +1 -0
  764. package/dist/types/components/q2-checkbox/test/q2-checkbox-test.vr.d.ts +1 -0
  765. package/dist/types/components/q2-checkbox-group/test/q2-checkbox-group-test.vr.d.ts +1 -0
  766. package/dist/types/components/q2-context/test/q2-context-test.vr.d.ts +1 -0
  767. package/dist/types/components/q2-currency/test/q2-currency-test.vr.d.ts +1 -0
  768. package/dist/types/components/q2-data-table/test/q2-data-table-test.vr.d.ts +1 -0
  769. package/dist/types/components/q2-editable-field/test/q2-editable-field-test.vr.d.ts +1 -0
  770. package/dist/types/components/q2-file-picker/test/q2-file-picker-test.vr.d.ts +1 -0
  771. package/dist/types/components/q2-formatted-text/test/q2-formatted-text-test.vr.d.ts +1 -0
  772. package/dist/types/components/q2-grid/q2-grid.d.ts +10 -0
  773. package/dist/types/components/q2-icon/test/q2-icon-test.vr.d.ts +1 -0
  774. package/dist/types/components/q2-input/test/q2-input-test.vr.d.ts +1 -0
  775. package/dist/types/components/q2-legend/q2-legend.d.ts +2 -0
  776. package/dist/types/components/q2-link/test/q2-link-test.vr.d.ts +1 -0
  777. package/dist/types/components/q2-list/test/q2-list-test.vr.d.ts +1 -0
  778. package/dist/types/components/q2-message/test/q2-message-test.vr.d.ts +1 -0
  779. package/dist/types/components/q2-meter/test/q2-meter-test.vr.d.ts +1 -0
  780. package/dist/types/components/q2-modal/test/q2-modal-test.vr.d.ts +1 -0
  781. package/dist/types/components/q2-otp/q2-otp.d.ts +159 -0
  782. package/dist/types/components/q2-pagination/test/q2-pagination-test.vr.d.ts +1 -0
  783. package/dist/types/components/q2-pill/q2-pill.d.ts +5 -2
  784. package/dist/types/components/q2-pill/test/q2-pill-test.vr.d.ts +1 -0
  785. package/dist/types/components/q2-radio/q2-radio.d.ts +1 -1
  786. package/dist/types/components/q2-radio/test/q2-radio-test.vr.d.ts +1 -0
  787. package/dist/types/components/q2-radio-group/test/q2-radio-group-test.vr.d.ts +1 -0
  788. package/dist/types/components/q2-section/test/q2-section-test.vr.d.ts +1 -0
  789. package/dist/types/components/q2-select/test/q2-select-test.vr.d.ts +1 -0
  790. package/dist/types/components/q2-stepper/test/q2-stepper-test.vr.d.ts +1 -0
  791. package/dist/types/components/q2-stepper-vertical/test/q2-stepper-vertical-test.vr.d.ts +1 -0
  792. package/dist/types/components/q2-tab-container/test/q2-tab-container-test.vr.d.ts +1 -0
  793. package/dist/types/components/q2-tag/test/q2-tag-test.vr.d.ts +1 -0
  794. package/dist/types/components/q2-textarea/test/q2-textarea-test.vr.d.ts +1 -0
  795. package/dist/types/components/q2-tooltip/q2-tooltip.d.ts +4 -0
  796. package/dist/types/components/q2-tooltip/test/q2-tooltip-test.vr.d.ts +1 -0
  797. package/dist/types/components.d.ts +306 -2
  798. package/dist/types/utils/component.d.ts +1 -1
  799. package/dist/types/utils/test/vr-helpers.d.ts +14 -0
  800. package/package.json +12 -3
  801. package/dist/cjs/component-DRAntnCA.js.map +0 -1
  802. package/dist/cjs/index-YvKoRT-t.js.map +0 -1
  803. package/dist/esm/component-DVxzK3WH.js.map +0 -1
  804. package/dist/esm/index-C4PILj1_.js.map +0 -1
  805. package/dist/q2-tecton-elements/component-DVxzK3WH.js +0 -40
  806. package/dist/q2-tecton-elements/component-DVxzK3WH.js.map +0 -1
  807. package/dist/q2-tecton-elements/index-C4PILj1_.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["q2MeterCss","Q2Meter","constructor","hostRef","this","scheduledAfterRender","animated","dotted","componentWillLoad","_completedValue","completedValue","_suggestedValue","suggestedValue","push","componentDidRender","_a","forEach","fn","ariaLabel","label","loc","completedLabel","suggestedLabel","maxValue","maxLabel","join","adjustTooltipDirection","percentage","tooltipText","eastCutoff","westCutoff","length","convertToPercentage","max","Number","trim","replace","completed","Math","round","suggested","isNaN","min","renderBar","completedDotStyles","suggestedDotStyles","tooltipCompleted","tooltipSuggested","transform","left","h","class","style","width","segments","Array","from","map","_","i","classes","hideTooltip","position","immediate","render","key","role","description"],"sources":["src/components/q2-meter/q2-meter.scss?tag=q2-meter&encapsulation=shadow","src/components/q2-meter/q2-meter.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n width: 100%;\n}\n\n.meter-container {\n --comp-meter-bar-height: #{var-list(--tct-meter-bar-height, 10px)};\n --comp-meter-bar-border-radius: #{var-list(--tct-meter-bar-border-radius, calc(var(--comp-meter-bar-height) / 2))};\n --comp-meter-dot-height: #{var-list(--tct-meter-dot-size, --tct-meter-bar-height, 10px)};\n --comp-meter-dot-border-style: #{var-list(--tct-meter-dot-border-style, solid)};\n --comp-meter-dot-border-width: #{var-list(--tct-meter-dot-border-width, calc(0.2 * var(--comp-meter-bar-height)))};\n --comp-meter-dot-border-color: #{var-list(--tct-meter-dot-border-color, #FFFFFF)};\n --comp-meter-dot-border-radius: #{var-list(--tct-meter-dot-border-radius, 50%)};\n --comp-meter-dot-background-color: #{var-list(--tct-meter-dot-background-color, --t-primary, #6A4A9E)};\n --comp-meter-tick-height: #{var-list(--tct-meter-ticket-height, calc(0.4 * var(--comp-meter-bar-height)))};\n --comp-meter-bar-shadow: #{var-list(--tct-meter-bar-shadow)};\n --comp-meter-bar-border: #{var-list(--tct-meter-bar-border)};\n\n :host([animated]:not([animated='false'])) & {\n --comp-meter-bar-transition: #{var-list(--tct-meter-bar-transition, #{width 0.2s ease-in-out})};\n --comp-meter-dot-transition: #{var-list(--tct-meter-dot-transition, #{left 0.2s ease-in-out})};\n }\n\n :host([dotted]:not([dotted='false'])) & {\n --comp-meter-dot-visibility: visible;\n }\n\n :host([segments]:not([segments='']):not([segments='0']):not([segments='1'])) & {\n --comp-meter-tick-visibility: visible;\n }\n\n .label {\n font-size: var-list(--tct-meter-label-font-size, 14px);\n font-weight: var-list(--tct-meter-label-font-weight, 600);\n color: var-list(--tct-meter-label-color, --t-text, #4D4D4D);\n margin: var-list(--tct-meter-label-margin, #{5px 0});\n }\n .description {\n font-size: var-list(--tct-meter-description-font-size, 14px);\n font-weight: var-list(--tct-meter-description-font-weight, 400);\n color: var-list(--tct-meter-description-color, #000000);\n line-height: var-list(--tct-meter-description-line-height, 21px);\n margin: var-list(--tct-meter-description-margin, #{5px 0});\n }\n .bar-container {\n position: relative;\n .bars {\n position: relative;\n top: 0;\n left: 0;\n width: 100%;\n height: var(--comp-meter-bar-height);\n background-color: var-list(--tct-meter-bar-background-color, --t-primary-completed2, #E0DEEF);\n margin: var-list(--tct-meter-bar-margin, #{5px 0});\n border: var-list(--comp-meter-bar-border);\n border-radius: var(--comp-meter-bar-border-radius);\n box-shadow: var-list(--comp-meter-bar-shadow);\n .completed-bar,\n .suggested-bar,\n .tick-bar {\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n border-radius: var(--comp-meter-bar-border-radius);\n transition: var-list(--comp-meter-bar-transition, none);\n }\n .completed-bar {\n background-color: var-list(--tct-meter-completed-bar-background-color, --t-primary, #6A4A9E);\n min-width: calc(var(--comp-meter-bar-height));\n width: 0%;\n z-index: 2;\n }\n .suggested-bar {\n background-color: var-list(--tct-meter-suggested-bar-background-color, --t-primary-l5, #B4A0D3);\n min-width: calc(var(--comp-meter-bar-height));\n width: 0%;\n z-index: 1;\n }\n .tick-bar {\n visibility: var-list(--comp-meter-tick-visibility, hidden);\n width: 100%;\n z-index: 3;\n display: flex;\n justify-content: space-evenly;\n align-items: center;\n .tick {\n width: 100%;\n border-right-width: var-list(--tct-meter-tick-width, 1px);\n border-right-color: var-list(--tct-meter-tick-color, --t-primary-l5, #B4A0D3);\n border-right-style: solid;\n height: var(--comp-meter-tick-height);\n &.tick-right {\n border-right-color: var-list(--tct-meter-tick-right-color, --t-a11y-gray-color-AA, #949494);\n }\n &:last-child {\n border-color: transparent;\n }\n\n }\n }\n }\n .dot-container {\n position: absolute;\n line-height: 0;\n left: 0;\n top: calc(50% - var(--comp-meter-dot-height) / 2 - var(--comp-meter-dot-border-width));\n transform: translateX(-50%);\n transition: var(--comp-meter-dot-transition, none);\n z-index: 4;\n .dot {\n visibility: var-list(--comp-meter-dot-visibility, hidden);\n width: calc(var(--comp-meter-dot-height) + 2 * var(--comp-meter-dot-border-width));\n height: calc(var(--comp-meter-dot-height) + 2 * var(--comp-meter-dot-border-width));\n background-color: var(--comp-meter-dot-background-color);\n border-style: var(--comp-meter-dot-border-style);\n border-width: var(--comp-meter-dot-border-width);\n border-color: var(--comp-meter-dot-border-color);\n border-radius: var(--comp-meter-dot-border-radius);\n box-shadow: var-list(--tct-meter-dot-box-shadow, --app-shadow-1);\n }\n &.suggested {\n .dot {\n visibility: hidden;\n }\n }\n }\n }\n .legends {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n color: var-list(--tct-meter-legend-label-color, --t-textA, #767676);\n font-weight: var-list(--tct-meter-legend-font-weight, 400);\n margin: var-list(--tct-meter-legend-margin, #{5px 0});\n .left {\n display: flex;\n flex-direction: row;\n .completed,\n .suggested {\n display: flex;\n flex-direction: row;\n align-items: center;\n .dot {\n margin-right: var-list(--tct-meter-dot-gap, 5px);\n border-radius: var-list(--tct-meter-legend-dot-radius, --app-border-radius-3, 5px);\n width: var-list(--tct-meter-legend-bar-width, 7px);\n height: var-list(--tct-meter-legend-bar-height, 7px);\n }\n .legend-label {\n font-size: inherit;\n }\n }\n .completed {\n margin-right: var-list(--tct-meter-legend-gap, 20px);\n .dot {\n background-color: var-list(--tct-meter-completed-bar-background-color, --t-primary, #6A4A9E);\n }\n }\n .suggested {\n .dot {\n background-color: var-list(--tct-meter-suggested-bar-background-color, --t-primary-l5, #B4A0D3);\n }\n }\n }\n .right {\n .max {\n font-size: inherit;\n text-align: right;\n }\n }\n }\n}\n\n","import { loc } from '@/utils';\nimport { Component, Prop, h, ComponentInterface, Element } from '@stencil/core';\n/**\n * @name Meter\n * @category Data Visualization\n * @summary Use for showing progress or a value within a known range.\n */\n@Component({ tag: 'q2-meter', shadow: true, styleUrl: 'q2-meter.scss' })\nexport class Q2Meter implements ComponentInterface {\n // #region Own Properties\n\n scheduledAfterRender: (() => void)[] = [];\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /**\n * Shows loading animation for bars, default is true.\n */\n @Prop({ reflect: true })\n animated: boolean = true;\n\n /**\n * Defines the label for the completed bar, which appears at the bottom in the legend section.\n * @localizable\n */\n @Prop({ reflect: true })\n completedLabel: string;\n\n /**\n * Defines the value for the completed bar.\n */\n @Prop({ reflect: true })\n completedValue: string;\n\n /**\n * Defines the description for the meter, which appears at the top just below the label.\n * @localizable\n */\n @Prop({ reflect: true })\n description: string;\n\n /**\n * Shows a circle shaped dot indicator on completed bar, default is true.\n */\n @Prop({ reflect: true })\n dotted: boolean = true;\n\n /**\n * Hide tooltips.\n * @localizable\n */\n @Prop({ reflect: true })\n hideTooltip: boolean;\n\n /**\n * Defines the label for the meter, which appears at the top.\n * @localizable\n */\n @Prop({ reflect: true })\n label: string;\n\n /**\n * Defines the label for the base bar, which appears at the bottom in the legend.\n * @localizable\n */\n @Prop({ reflect: true })\n maxLabel: string;\n\n /**\n * Defines the value for the base bar.\n */\n @Prop({ reflect: true })\n maxValue: string;\n\n /**\n * Shows thin tick bars based on the number of segments provided.\n */\n @Prop({ reflect: true })\n segments: number;\n\n /**\n * Defines the label for the suggested bar, which appears at the bottom in the legend.\n * @localizable\n */\n @Prop({ reflect: true })\n suggestedLabel: string;\n\n /**\n * Defines the value for the suggested bar.\n */\n @Prop({ reflect: true })\n suggestedValue: string;\n\n /**\n * Defines custom text for the completed bar tooltip.\n * @localizable\n */\n @Prop({ reflect: true })\n tooltipCompleted: string;\n\n /**\n * Defines custom text for the suggested bar tooltip.\n * @localizable\n */\n @Prop({ reflect: true })\n tooltipSuggested: string;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad(): void {\n if (this.animated) {\n const _completedValue = this.completedValue;\n const _suggestedValue = this.suggestedValue;\n this.completedValue = '0';\n this.suggestedValue = '0';\n this.scheduledAfterRender.push(() => {\n this.completedValue = _completedValue;\n this.suggestedValue = _suggestedValue;\n });\n }\n }\n\n componentDidRender(): void {\n this.scheduledAfterRender?.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }\n\n // #endregion\n // #region Local Methods\n\n get ariaLabel() {\n const label = [];\n label.push(`${loc(this.label || '')} meter showing,`);\n label.push(`${this.completedValue || 'zero'} ${loc(this.completedLabel || '')},`);\n label.push(`${this.suggestedValue || ''} ${loc(this.suggestedLabel || '')},`);\n label.push(`out of ${this.maxValue || ''} ${loc(this.maxLabel || '')}`);\n return label.join(' ');\n }\n\n // Adjust tooltip direction if the value less than 5% or greater than 95% to avoid exceeding to the parent\n adjustTooltipDirection(percentage, tooltipText = '') {\n let eastCutoff = 5;\n let westCutoff = 95;\n // longer text should have more margin for cutoff\n if (tooltipText.length > 8) {\n eastCutoff = 15;\n westCutoff = 85;\n }\n if (percentage < eastCutoff) return 'ne';\n else if (percentage > westCutoff) return 'nw';\n else return 'n';\n }\n\n convertToPercentage(completedValue: string, suggestedValue: string, maxValue: string) {\n let max = Number((maxValue || '100').trim().replace(/[$,]/g, ''));\n let completed = Math.round((100 * Number((completedValue || '0').trim().replace(/[$,]/g, ''))) / max);\n let suggested = Math.round((100 * Number((suggestedValue || '0').trim().replace(/[$,]/g, ''))) / max);\n max = isNaN(max) ? 100 : max;\n completed = isNaN(completed) ? 0 : completed;\n suggested = isNaN(suggested) ? 0 : suggested;\n return [Math.min(100, completed), Math.min(100, suggested)];\n }\n\n // #endregion\n // #region Render Methods\n\n renderBar(completed: number, suggested: number) {\n suggested = Math.max(completed, suggested);\n const completedDotStyles: { left?: string; transform?: string } = {};\n const suggestedDotStyles: { left?: string; transform?: string } = {};\n const tooltipCompleted = this.tooltipCompleted ? loc(this.tooltipCompleted) : this.completedValue;\n const tooltipSuggested = this.tooltipSuggested ? loc(this.tooltipSuggested) : this.suggestedValue;\n\n if (completed === 0) {\n completedDotStyles.transform = `translateX(0%)`;\n completedDotStyles.left = 'calc(0% - var(--comp-meter-dot-border-width))';\n } else if (completed === 100) {\n completedDotStyles.transform = `translateX(-100%)`;\n completedDotStyles.left = '100%';\n } else if (0 < completed && completed < 100) {\n completedDotStyles.left = `${Math.max(1, Math.min(99, completed))}%`;\n }\n\n if (suggested === 0) {\n suggestedDotStyles.transform = `translateX(0%)`;\n suggestedDotStyles.left = '0%';\n } else if (suggested === 100) {\n suggestedDotStyles.transform = `translateX(-100%)`;\n suggestedDotStyles.left = '100%';\n } else if (0 < suggested && suggested < 100) {\n suggestedDotStyles.left = `${Math.max(1, Math.min(99, suggested))}%`;\n }\n\n return (\n <div class=\"bar-container\">\n <div class=\"bars\">\n <div\n class=\"completed-bar\"\n style={{ width: `${completed}%` }}\n ></div>\n {this.suggestedValue && this.suggestedLabel && (\n <div\n class=\"suggested-bar\"\n style={{ width: `${suggested}%` }}\n ></div>\n )}\n {this.segments && !isNaN(this.segments) && this.segments > 1 ? (\n <div class=\"tick-bar\">\n {Array.from(new Array(this.segments)).map((_, i) => {\n const classes = ['tick'];\n // color changes on ticks for greater than completed value\n if (Math.round((100 * (i + 1)) / this.segments) > completed) classes.push('tick-right');\n return <div class={classes.join(' ')}></div>;\n })}\n </div>\n ) : (\n ''\n )}\n </div>\n <div\n class=\"dot-container completed\"\n style={completedDotStyles}\n >\n {this.hideTooltip ? (\n <div class=\"dot\"></div>\n ) : (\n <q2-tooltip\n label={tooltipCompleted}\n position={this.adjustTooltipDirection(completed, tooltipCompleted)}\n immediate\n >\n <div class=\"dot\"></div>\n </q2-tooltip>\n )}\n </div>\n {suggested > completed ? (\n <div\n class=\"dot-container suggested\"\n style={suggestedDotStyles}\n >\n {this.hideTooltip ? (\n <div class=\"dot\"></div>\n ) : (\n <q2-tooltip\n label={tooltipSuggested}\n position={this.adjustTooltipDirection(suggested, tooltipSuggested)}\n immediate\n >\n <div class=\"dot\"></div>\n </q2-tooltip>\n )}\n </div>\n ) : (\n ''\n )}\n </div>\n );\n }\n\n render() {\n const [completed, suggested] = this.convertToPercentage(\n this.completedValue,\n this.suggestedValue,\n this.maxValue\n );\n return (\n <div\n class=\"meter-container\"\n aria-label={this.ariaLabel}\n role=\"group\"\n >\n {this.label && (\n <div\n class=\"label\"\n aria-label={loc(this.label)}\n >\n {loc(this.label)}\n </div>\n )}\n {this.description && (\n <div\n class=\"description\"\n aria-label={loc(this.description)}\n >\n {loc(this.description)}\n </div>\n )}\n {this.renderBar(completed, suggested)}\n <div class=\"legends\">\n <div class=\"left\">\n {this.completedValue || this.completedLabel ? (\n <div class=\"completed\">\n <div class=\"dot\"></div>\n <div class=\"legend-label\">\n {this.completedValue} {loc(this.completedLabel)}\n </div>\n </div>\n ) : (\n ''\n )}\n {this.suggestedValue || this.suggestedLabel ? (\n <div class=\"suggested\">\n <div class=\"dot\"></div>\n <div class=\"legend-label\">\n {this.suggestedValue} {loc(this.suggestedLabel)}\n </div>\n </div>\n ) : (\n ''\n )}\n </div>\n <div class=\"right\">\n <div class=\"max\">\n {this.maxValue} {loc(this.maxLabel)}\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["q2MeterCss","Q2Meter","constructor","hostRef","this","scheduledAfterRender","animated","dotted","componentWillLoad","_completedValue","completedValue","_suggestedValue","suggestedValue","push","componentDidRender","_a","forEach","fn","ariaLabel","label","loc","completedLabel","suggestedLabel","maxValue","maxLabel","join","adjustTooltipDirection","percentage","tooltipText","eastCutoff","westCutoff","length","convertToPercentage","max","Number","trim","replace","completed","Math","round","suggested","isNaN","min","renderBar","completedDotStyles","suggestedDotStyles","tooltipCompleted","tooltipSuggested","transform","left","h","class","style","width","segments","Array","from","map","_","i","classes","hideTooltip","position","immediate","render","key","role","description"],"sources":["src/components/q2-meter/q2-meter.scss?tag=q2-meter&encapsulation=shadow","src/components/q2-meter/q2-meter.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n@import './variables';\n\n:host {\n width: 100%;\n}\n\n.meter-container {\n --comp-meter-bar-height: #{var-list(--tct-meter-bar-height, 10px)};\n --comp-meter-bar-border-radius: #{var-list(--tct-meter-bar-border-radius, calc(var(--comp-meter-bar-height) / 2))};\n --comp-meter-dot-height: #{var-list(--tct-meter-dot-size, --tct-meter-bar-height, 10px)};\n --comp-meter-dot-border-style: #{var-list(--tct-meter-dot-border-style, solid)};\n --comp-meter-dot-border-width: #{var-list(--tct-meter-dot-border-width, calc(0.2 * var(--comp-meter-bar-height)))};\n --comp-meter-dot-border-color: #{var-list(--tct-meter-dot-border-color, #FFFFFF)};\n --comp-meter-dot-border-radius: #{var-list(--tct-meter-dot-border-radius, 50%)};\n --comp-meter-dot-background-color: #{var-list(--tct-meter-dot-background-color, --t-primary, #6A4A9E)};\n --comp-meter-tick-height: #{var-list(--tct-meter-ticket-height, calc(0.4 * var(--comp-meter-bar-height)))};\n --comp-meter-bar-shadow: #{var-list(--tct-meter-bar-shadow)};\n --comp-meter-bar-border: #{var-list(--tct-meter-bar-border)};\n\n :host([animated]:not([animated='false'])) & {\n --comp-meter-bar-transition: #{var-list(--tct-meter-bar-transition, #{width 0.2s ease-in-out})};\n --comp-meter-dot-transition: #{var-list(--tct-meter-dot-transition, #{left 0.2s ease-in-out})};\n }\n\n :host([dotted]:not([dotted='false'])) & {\n --comp-meter-dot-visibility: visible;\n }\n\n :host([segments]:not([segments='']):not([segments='0']):not([segments='1'])) & {\n --comp-meter-tick-visibility: visible;\n }\n\n .label {\n font-size: var-list(--tct-meter-label-font-size, 14px);\n font-weight: var-list(--tct-meter-label-font-weight, 600);\n color: var-list(--tct-meter-label-color, --t-text, #4D4D4D);\n margin: var-list(--tct-meter-label-margin, #{5px 0});\n }\n .description {\n font-size: var-list(--tct-meter-description-font-size, 14px);\n font-weight: var-list(--tct-meter-description-font-weight, 400);\n color: var-list(--tct-meter-description-color, #000000);\n line-height: var-list(--tct-meter-description-line-height, 21px);\n margin: var-list(--tct-meter-description-margin, #{5px 0});\n }\n .bar-container {\n position: relative;\n .bars {\n position: relative;\n top: 0;\n left: 0;\n width: 100%;\n height: var(--comp-meter-bar-height);\n background-color: var-list(--tct-meter-bar-background-color, --t-primary-completed2, #E0DEEF);\n margin: var-list(--tct-meter-bar-margin, #{5px 0});\n border: var-list(--comp-meter-bar-border);\n border-radius: var(--comp-meter-bar-border-radius);\n box-shadow: var-list(--comp-meter-bar-shadow);\n .completed-bar,\n .suggested-bar,\n .tick-bar {\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n border-radius: var(--comp-meter-bar-border-radius);\n transition: var-list(--comp-meter-bar-transition, none);\n }\n .completed-bar {\n background-color: var-list(--tct-meter-completed-bar-background-color, --t-primary, #6A4A9E);\n min-width: calc(var(--comp-meter-bar-height));\n width: 0%;\n z-index: 2;\n }\n .suggested-bar {\n background-color: var-list(--tct-meter-suggested-bar-background-color, --t-primary-l5, #B4A0D3);\n min-width: calc(var(--comp-meter-bar-height));\n width: 0%;\n z-index: 1;\n }\n .tick-bar {\n visibility: var-list(--comp-meter-tick-visibility, hidden);\n width: 100%;\n z-index: 3;\n display: flex;\n justify-content: space-evenly;\n align-items: center;\n .tick {\n width: 100%;\n border-right-width: var-list(--tct-meter-tick-width, 1px);\n border-right-color: var-list(--tct-meter-tick-color, --t-primary-l5, #B4A0D3);\n border-right-style: solid;\n height: var(--comp-meter-tick-height);\n &.tick-right {\n border-right-color: var-list(--tct-meter-tick-right-color, --t-a11y-gray-color-AA, #949494);\n }\n &:last-child {\n border-color: transparent;\n }\n\n }\n }\n }\n .dot-container {\n position: absolute;\n line-height: 0;\n left: 0;\n top: calc(50% - var(--comp-meter-dot-height) / 2 - var(--comp-meter-dot-border-width));\n transform: translateX(-50%);\n transition: var(--comp-meter-dot-transition, none);\n z-index: 4;\n .dot {\n visibility: var-list(--comp-meter-dot-visibility, hidden);\n width: calc(var(--comp-meter-dot-height) + 2 * var(--comp-meter-dot-border-width));\n height: calc(var(--comp-meter-dot-height) + 2 * var(--comp-meter-dot-border-width));\n background-color: var(--comp-meter-dot-background-color);\n border-style: var(--comp-meter-dot-border-style);\n border-width: var(--comp-meter-dot-border-width);\n border-color: var(--comp-meter-dot-border-color);\n border-radius: var(--comp-meter-dot-border-radius);\n box-shadow: var-list(--tct-meter-dot-box-shadow, --app-shadow-1);\n }\n &.suggested {\n .dot {\n visibility: hidden;\n }\n }\n }\n }\n .legends {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n color: var-list(--tct-meter-legend-label-color, --t-textA, #767676);\n font-weight: var-list(--tct-meter-legend-font-weight, 400);\n margin: var-list(--tct-meter-legend-margin, #{5px 0});\n .left {\n display: flex;\n flex-direction: row;\n .completed,\n .suggested {\n display: flex;\n flex-direction: row;\n align-items: center;\n .dot {\n margin-right: var-list(--tct-meter-dot-gap, 5px);\n border-radius: var-list(--tct-meter-legend-dot-radius, --app-border-radius-3, 5px);\n width: var-list(--tct-meter-legend-bar-width, 7px);\n height: var-list(--tct-meter-legend-bar-height, 7px);\n }\n .legend-label {\n font-size: inherit;\n }\n }\n .completed {\n margin-right: var-list(--tct-meter-legend-gap, 20px);\n .dot {\n background-color: var-list(--tct-meter-completed-bar-background-color, --t-primary, #6A4A9E);\n }\n }\n .suggested {\n .dot {\n background-color: var-list(--tct-meter-suggested-bar-background-color, --t-primary-l5, #B4A0D3);\n }\n }\n }\n .right {\n .max {\n font-size: inherit;\n text-align: right;\n }\n }\n }\n}\n\n","import { loc } from '@/utils';\nimport { Component, Prop, h, ComponentInterface, Element } from '@stencil/core';\n/**\n * @name Meter\n * @category Data Visualization\n * @summary Use for showing progress or a value within a known range.\n */\n@Component({ tag: 'q2-meter', shadow: true, styleUrl: 'q2-meter.scss' })\nexport class Q2Meter implements ComponentInterface {\n // #region Own Properties\n\n scheduledAfterRender: (() => void)[] = [];\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /**\n * Shows loading animation for bars, default is true.\n */\n @Prop({ reflect: true })\n animated: boolean = true;\n\n /**\n * Defines the label for the completed bar, which appears at the bottom in the legend section.\n * @localizable\n */\n @Prop({ reflect: true })\n completedLabel: string;\n\n /**\n * Defines the value for the completed bar.\n */\n @Prop({ reflect: true })\n completedValue: string;\n\n /**\n * Defines the description for the meter, which appears at the top just below the label.\n * @localizable\n */\n @Prop({ reflect: true })\n description: string;\n\n /**\n * Shows a circle shaped dot indicator on completed bar, default is true.\n */\n @Prop({ reflect: true })\n dotted: boolean = true;\n\n /**\n * Hide tooltips.\n * @localizable\n */\n @Prop({ reflect: true })\n hideTooltip: boolean;\n\n /**\n * Defines the label for the meter, which appears at the top.\n * @localizable\n */\n @Prop({ reflect: true })\n label: string;\n\n /**\n * Defines the label for the base bar, which appears at the bottom in the legend.\n * @localizable\n */\n @Prop({ reflect: true })\n maxLabel: string;\n\n /**\n * Defines the value for the base bar.\n */\n @Prop({ reflect: true })\n maxValue: string;\n\n /**\n * Shows thin tick bars based on the number of segments provided.\n */\n @Prop({ reflect: true })\n segments: number;\n\n /**\n * Defines the label for the suggested bar, which appears at the bottom in the legend.\n * @localizable\n */\n @Prop({ reflect: true })\n suggestedLabel: string;\n\n /**\n * Defines the value for the suggested bar.\n */\n @Prop({ reflect: true })\n suggestedValue: string;\n\n /**\n * Defines custom text for the completed bar tooltip.\n * @localizable\n */\n @Prop({ reflect: true })\n tooltipCompleted: string;\n\n /**\n * Defines custom text for the suggested bar tooltip.\n * @localizable\n */\n @Prop({ reflect: true })\n tooltipSuggested: string;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad(): void {\n if (this.animated) {\n const _completedValue = this.completedValue;\n const _suggestedValue = this.suggestedValue;\n this.completedValue = '0';\n this.suggestedValue = '0';\n this.scheduledAfterRender.push(() => {\n this.completedValue = _completedValue;\n this.suggestedValue = _suggestedValue;\n });\n }\n }\n\n componentDidRender(): void {\n this.scheduledAfterRender?.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }\n\n // #endregion\n // #region Local Methods\n\n get ariaLabel() {\n const label = [];\n label.push(`${loc(this.label || '')} meter showing,`);\n label.push(`${this.completedValue || 'zero'} ${loc(this.completedLabel || '')},`);\n label.push(`${this.suggestedValue || ''} ${loc(this.suggestedLabel || '')},`);\n label.push(`out of ${this.maxValue || ''} ${loc(this.maxLabel || '')}`);\n return label.join(' ');\n }\n\n // Adjust tooltip direction if the value less than 5% or greater than 95% to avoid exceeding to the parent\n adjustTooltipDirection(percentage, tooltipText = '') {\n let eastCutoff = 5;\n let westCutoff = 95;\n // longer text should have more margin for cutoff\n if (tooltipText.length > 8) {\n eastCutoff = 15;\n westCutoff = 85;\n }\n if (percentage < eastCutoff) return 'ne';\n else if (percentage > westCutoff) return 'nw';\n else return 'n';\n }\n\n convertToPercentage(completedValue: string, suggestedValue: string, maxValue: string) {\n let max = Number((maxValue || '100').trim().replace(/[$,]/g, ''));\n let completed = Math.round((100 * Number((completedValue || '0').trim().replace(/[$,]/g, ''))) / max);\n let suggested = Math.round((100 * Number((suggestedValue || '0').trim().replace(/[$,]/g, ''))) / max);\n max = isNaN(max) ? 100 : max;\n completed = isNaN(completed) ? 0 : completed;\n suggested = isNaN(suggested) ? 0 : suggested;\n return [Math.min(100, completed), Math.min(100, suggested)];\n }\n\n // #endregion\n // #region Render Methods\n\n renderBar(completed: number, suggested: number) {\n suggested = Math.max(completed, suggested);\n const completedDotStyles: { left?: string; transform?: string } = {};\n const suggestedDotStyles: { left?: string; transform?: string } = {};\n const tooltipCompleted = this.tooltipCompleted ? loc(this.tooltipCompleted) : this.completedValue;\n const tooltipSuggested = this.tooltipSuggested ? loc(this.tooltipSuggested) : this.suggestedValue;\n\n if (completed === 0) {\n completedDotStyles.transform = `translateX(0%)`;\n completedDotStyles.left = 'calc(0% - var(--comp-meter-dot-border-width))';\n } else if (completed === 100) {\n completedDotStyles.transform = `translateX(-100%)`;\n completedDotStyles.left = '100%';\n } else if (0 < completed && completed < 100) {\n completedDotStyles.left = `${Math.max(1, Math.min(99, completed))}%`;\n }\n\n if (suggested === 0) {\n suggestedDotStyles.transform = `translateX(0%)`;\n suggestedDotStyles.left = '0%';\n } else if (suggested === 100) {\n suggestedDotStyles.transform = `translateX(-100%)`;\n suggestedDotStyles.left = '100%';\n } else if (0 < suggested && suggested < 100) {\n suggestedDotStyles.left = `${Math.max(1, Math.min(99, suggested))}%`;\n }\n\n return (\n <div class=\"bar-container\">\n <div class=\"bars\">\n <div\n class=\"completed-bar\"\n style={{ width: `${completed}%` }}\n ></div>\n {this.suggestedValue && this.suggestedLabel && (\n <div\n class=\"suggested-bar\"\n style={{ width: `${suggested}%` }}\n ></div>\n )}\n {this.segments && !isNaN(this.segments) && this.segments > 1 ? (\n <div class=\"tick-bar\">\n {Array.from(new Array(this.segments)).map((_, i) => {\n const classes = ['tick'];\n // color changes on ticks for greater than completed value\n if (Math.round((100 * (i + 1)) / this.segments) > completed) classes.push('tick-right');\n return <div class={classes.join(' ')}></div>;\n })}\n </div>\n ) : (\n ''\n )}\n </div>\n <div\n class=\"dot-container completed\"\n style={completedDotStyles}\n >\n {this.hideTooltip ? (\n <div class=\"dot\"></div>\n ) : (\n <q2-tooltip\n label={tooltipCompleted}\n position={this.adjustTooltipDirection(completed, tooltipCompleted)}\n immediate\n >\n <div class=\"dot\"></div>\n </q2-tooltip>\n )}\n </div>\n {suggested > completed ? (\n <div\n class=\"dot-container suggested\"\n style={suggestedDotStyles}\n >\n {this.hideTooltip ? (\n <div class=\"dot\"></div>\n ) : (\n <q2-tooltip\n label={tooltipSuggested}\n position={this.adjustTooltipDirection(suggested, tooltipSuggested)}\n immediate\n >\n <div class=\"dot\"></div>\n </q2-tooltip>\n )}\n </div>\n ) : (\n ''\n )}\n </div>\n );\n }\n\n render() {\n const [completed, suggested] = this.convertToPercentage(\n this.completedValue,\n this.suggestedValue,\n this.maxValue\n );\n return (\n <div\n class=\"meter-container\"\n aria-label={this.ariaLabel}\n role=\"group\"\n >\n {this.label && (\n <div\n class=\"label\"\n aria-label={loc(this.label)}\n >\n {loc(this.label)}\n </div>\n )}\n {this.description && (\n <div\n class=\"description\"\n aria-label={loc(this.description)}\n >\n {loc(this.description)}\n </div>\n )}\n {this.renderBar(completed, suggested)}\n <div class=\"legends\">\n <div class=\"left\">\n {this.completedValue || this.completedLabel ? (\n <div class=\"completed\">\n <div class=\"dot\"></div>\n <div class=\"legend-label\">\n {this.completedValue} {loc(this.completedLabel)}\n </div>\n </div>\n ) : (\n ''\n )}\n {this.suggestedValue || this.suggestedLabel ? (\n <div class=\"suggested\">\n <div class=\"dot\"></div>\n <div class=\"legend-label\">\n {this.suggestedValue} {loc(this.suggestedLabel)}\n </div>\n </div>\n ) : (\n ''\n )}\n </div>\n <div class=\"right\">\n <div class=\"max\">\n {this.maxValue} {loc(this.maxLabel)}\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"q2-modal.entry.esm.js","sources":["src/components/q2-modal/q2-modal.scss?tag=q2-modal&encapsulation=shadow","src/components/q2-modal/q2-modal.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n@keyframes showBackdrop {\n from {\n opacity: 0;\n }\n}\n\n@keyframes hideBackdrop {\n to {\n opacity: 0;\n }\n}\n\n// CSS variables don't inherit into the ::backdrop pseudo-element\n$animation-tween: #{var-list(--tct-modal-tween, --app-tween-2, unquote('0.4s ease'))};\n\ndialog {\n --comp-border-radius-default: var(--app-scale-3x, 15px);\n --comp-border-radius: #{var-list(--tct-modal-border-radius, --comp-border-radius-default)};\n --comp-desktop-border-radius: #{var-list(--tct-modal-border-radius, --app-scale-3x, 15px)};\n --comp-close-button-size: #{var-list(--tct-modal-close-button-size, --t-a11y-min-size, 44px)};\n --comp-header-height: #{var-list(--tct-modal-header-height, --t-a11y-min-size, 44px)};\n --comp-dialog-background: #{var-list(--tct-modal-background, --t-base, #ffffff)};\n --comp-dialog-color: #{var-list(--tct-modal-color, --t-text, #4d4d4d)};\n --comp-dialog-padding: #{var-list(--tct-modal-padding, --app-scale-3x, 15px)};\n --comp-content-gradient-height: #{var-list(--tct-modal-content-gradient-height, --app-scale-2x, 10px)};\n --comp-dialog-gap: #{var-list(--tct-modal-gap, --app-scale-2x, 10px)};\n --comp-dialog-max-width: #{var-list(--tct-modal-max-width, 600px)};\n --comp-dialog-max-height: #{var-list(--tct-modal-max-height, 100vh)}; // should not use vh in the extension\n --comp-dialog-min-height: #{var-list(--tct-modal-min-height, 40vh)};\n --comp-dialog-box-shadow: #{var-list(\n --tct-modal-box-shadow,\n --app-shadow-2,\n unquote(\"0px 0px 2px rgba(0, 0, 0, 0.12), 0px 4px 8px rgba(0, 0, 0, 0.14)\")\n )};\n\n position: fixed;\n top: 100%;\n bottom: unset;\n color: var(--comp-dialog-color);\n background: var(--comp-dialog-background);\n transition: transform $animation-tween, opacity $animation-tween;\n width: 100%;\n max-width: var(--comp-dialog-max-width);\n border: 0;\n border-radius: var(--comp-border-radius);\n box-shadow: var(--comp-dialog-box-shadow);\n padding: 0;\n height: auto;\n overflow: hidden;\n &::backdrop {\n opacity: 0;\n background: var-list(--tct-modal-backdrop-background, --t-top-a2, rgba(13, 13, 13, 0.6));\n }\n\n &[open] {\n border-radius: var(--comp-desktop-border-radius);\n top: 0px;\n bottom: 0px;\n height: fit-content;\n transform: translateY(10%);\n opacity: 1;\n\n &.is-opening,\n &.is-open {\n opacity: 1;\n transform: translateY(0);\n &::backdrop {\n opacity: 1;\n animation: showBackdrop $animation-tween;\n }\n }\n\n &.is-closing {\n transform: translateY(10%);\n\n &::backdrop {\n animation: hideBackdrop $animation-tween;\n }\n }\n }\n}\n\n.content {\n overflow-y: auto;\n @include tiny-scrollbar();\n\n .icon {\n height: var-list(--tct-modal-icon-size --app-scale-9x, 45px);\n margin: var-list(--tct-modal-icon-margin, --app-scale-2x, 10px);\n display: flex;\n justify-content: center;\n q2-icon {\n width: var-list(--tct-modal-icon-size --app-scale-9x, 45px);\n }\n }\n .image {\n display: flex;\n justify-content: center;\n img {\n width: 100%;\n border-radius: var-list(--tct-modal-image-border-radius, --app-border-radius-2, 8px);\n }\n }\n .description {\n font-size: var-list(--tct-modal-description-font-size, 14px);\n }\n &.more-gradient {\n -webkit-mask-image: linear-gradient(to bottom, red 85%, transparent 100%);\n mask-image: linear-gradient(to bottom, red 85%, transparent 100%);\n }\n}\n\n.interior {\n display: grid;\n min-height: var(--comp-dialog-min-height);\n grid-template-rows: auto 1fr auto;\n gap: var(--comp-dialog-gap);\n max-height: calc(var(--comp-dialog-max-height) - var(--comp-dialog-padding));\n padding: var(--comp-dialog-padding);\n\n &.is-list {\n header,\n footer {\n position: relative;\n\n &:before {\n content: '';\n display: block;\n position: absolute;\n left: 0;\n height: var(--comp-content-gradient-height);\n width: 100%;\n z-index: 1;\n }\n }\n }\n}\n\nheader {\n display: flex;\n justify-content: space-between;\n align-items: center;\n .title {\n @include line-clamp(3);\n text-align: left;\n font-weight: var-list(--tct-modal-title-font-weight, 400);\n margin: 0;\n }\n\n .btn-close {\n grid-area: close;\n width: var(--comp-close-button-size);\n height: var(--comp-close-button-size);\n }\n}\n","import { Component, ComponentInterface, Prop, Method, h, State, Event, EventEmitter, Element } from '@stencil/core';\nimport { debounce, hasSlotContent, waitForNextPaint } from 'src/utils';\nimport sanitizeHTMLString from '@/utils/sanitize-html-string';\n\nimport type { ModalOption, ModalResponse } from 'q2-tecton-common/lib/types/modal';\n\n/**\n * @name Modal\n * @category Display\n * @summary Use for focused interactions that require user attention before continuing.\n * @slot content - A slot to display custom content in the modal body above the description.\n * @slot action - A slot to display up to four elements compatible with [Action Group](https://tecton.q2developer.com/design-system/q2-action-group) in the modal's footer.\n */\n@Component({ tag: 'q2-modal', shadow: true, styleUrl: 'q2-modal.scss' })\nexport class Q2Modal implements ComponentInterface {\n // #region Own Properties\n\n // to prevent background scroll when modal scrolls\n bodyOverflow: string = '';\n contentElement: HTMLDivElement;\n debouncedScroll: () => void;\n dialogElement: HTMLDialogElement;\n scheduledAfterRender: (() => void)[] = [];\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n maxActionButtons: number = 4;\n\n @State()\n renderStatus: 'is-open' | 'is-closing' | 'is-opening' = 'is-closing';\n\n // #endregion\n // #region Public Property API\n\n /**\n * Controls visibility of the close button in the top right corner.\n */\n @Prop({ reflect: true })\n closable: boolean = true;\n\n /**\n * Allows HTML markup as modal content, but it will be sanitized for security purposes.\n */\n @Prop()\n customMarkup: string;\n\n /**\n * A plain text description of the modal. Use this to provide context or information to the user.\n */\n @Prop()\n description: string;\n\n /**\n * The icon to display at the top of the modal. [See Icon documentation](https://tecton.q2developer.com/design-system/q2-icon).\n */\n @Prop()\n icon: string;\n\n /**\n * An image URL to be displayed beneath the title. It renders with 100% width.\n */\n @Prop({ reflect: true })\n imageSrc: string;\n\n /**\n * A plain text title of the modal displayed at the top.\n */\n @Prop({ mutable: true, reflect: true })\n title: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when one of action buttons is clicked.\n */\n @Event()\n tctClick: EventEmitter;\n\n /**\n * Emitted when the modal is closed.\n */\n @Event()\n tctClose: EventEmitter;\n\n /**\n * Emitted when the modal is opened.\n */\n @Event()\n tctOpen: EventEmitter;\n\n /**\n * Emitted when the modal has finished rendering.\n * @private\n */\n @Event({ bubbles: false })\n tctReady: EventEmitter;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.dialogElement.removeEventListener('cancel', this.onCancel);\n this.contentElement?.removeEventListener('scroll', this.debouncedScroll);\n }\n\n componentDidLoad() {\n this.dialogElement.addEventListener('cancel', this.onCancel);\n this.tctReady.emit();\n this.bodyOverflow = document.body.style.overflow;\n this.debouncedScroll = debounce(this.onContentScroll, 100);\n this.contentElement.addEventListener('scroll', this.debouncedScroll);\n }\n\n componentDidRender(): void {\n this.scheduledAfterRender?.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }\n\n // #endregion\n // #region Public Methods API\n\n @Method()\n async closeModal(data?: ModalResponse) {\n this.tctClose.emit(data);\n this.renderStatus = 'is-closing';\n document.body.style.overflow = this.bodyOverflow;\n this.dialogElement.addEventListener(\n 'transitionend',\n () => {\n if (this.renderStatus !== 'is-closing') return;\n this.dialogElement.close();\n this.renderStatus = null;\n },\n { once: true }\n );\n }\n\n @Method()\n async openModal(option?: ModalOption) {\n if (this.dialogElement?.open) return;\n this.tctOpen.emit(option);\n await waitForNextPaint();\n // overwrite the properties if option provided\n if (option) {\n this.title = option?.title || this.title;\n this.description = option?.description || this.description;\n this.imageSrc = option?.imageSrc || this.imageSrc;\n this.icon = option?.icon || this.icon;\n this.description = option?.description || this.description;\n }\n this.dialogElement.showModal();\n this.dialogElement.open = true;\n document.body.style.overflow = 'hidden';\n this.initializeModal();\n this.renderStatus = 'is-opening';\n this.dialogElement.addEventListener(\n 'transitionend',\n () => {\n if (this.renderStatus !== 'is-opening') return;\n this.renderStatus = 'is-open';\n },\n { once: true }\n );\n }\n\n // #endregion\n // #region Local Methods\n\n initializeModal = () => {\n // limits 4 buttons in action slot\n this.hostElement.querySelectorAll<HTMLElement>('[slot=\"action\"]').forEach((el, i) => {\n if (i >= this.maxActionButtons) {\n console.warn(\n `q2-modal allows up to ${this.maxActionButtons} action buttons, [${el.getAttribute('label') || el.textContent}] button is now hidden.`\n );\n el.hidden = true;\n }\n });\n this.contentElement.scrollTo({ top: 0 });\n this.debouncedScroll();\n };\n\n onCancel = (event: Event) => {\n event.preventDefault();\n this.closeModal();\n };\n\n onClick = (event: MouseEvent) => {\n event.stopPropagation();\n const eventTarget = event.target as HTMLElement;\n if (!(eventTarget instanceof HTMLElement)) return;\n const slot = eventTarget.getAttribute('slot');\n if (slot === 'action') {\n this.tctClick.emit({ value: eventTarget.dataset.value });\n this.onCancel(event);\n } else {\n const isInContent = !!eventTarget.closest('.interior , q2-modal');\n if (isInContent) return;\n this.onCancel(event);\n }\n };\n\n onContentScroll = () => {\n const scrollHeight = this.contentElement.scrollHeight;\n const scrollTop = Math.ceil(this.contentElement.scrollTop);\n const contentHeight = Math.ceil(this.contentElement.getBoundingClientRect()?.height || 0);\n // to show bottom gradient when more contents available\n if (scrollHeight > contentHeight) {\n scrollHeight <= contentHeight + scrollTop\n ? this.contentElement.classList.remove('more-gradient')\n : this.contentElement.classList.add('more-gradient');\n } else {\n this.contentElement.classList.remove('more-gradient');\n }\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n const interiorClasses = `interior`;\n const renderStatus = `${this.renderStatus || ''}`;\n return (\n <dialog\n ref={el => (this.dialogElement = el)}\n class={renderStatus}\n onClick={this.onClick}\n >\n <div class={interiorClasses}>\n {this.title && (\n <header>\n {this.title && <h2 class=\"title\">{this.title}</h2>}\n {!!this.closable && (\n <q2-btn\n class=\"btn-close\"\n test-id=\"btnClose\"\n onClick={this.onCancel}\n label=\"tecton.element.modal.close\"\n hide-label\n >\n <q2-icon type=\"close\" />\n </q2-btn>\n )}\n </header>\n )}\n <div\n class=\"content\"\n ref={el => (this.contentElement = el)}\n >\n {this.icon && (\n <div class=\"icon\">\n <q2-icon type={this.icon}></q2-icon>\n </div>\n )}\n {this.imageSrc && (\n <div class=\"image\">\n <img src={this.imageSrc}></img>\n </div>\n )}\n {hasSlotContent(this.hostElement, 'content') && <slot name=\"content\"></slot>}\n {this.description && <p class=\"description\">{this.description}</p>}\n {this.customMarkup && (\n <p\n class=\"customMarkup\"\n innerHTML={sanitizeHTMLString(this.customMarkup)}\n ></p>\n )}\n </div>\n <footer>\n <q2-action-group full-width>\n <slot name=\"action\"></slot>\n </q2-action-group>\n </footer>\n </div>\n </dialog>\n );\n }\n\n // #endregion\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"q2-modal.entry.esm.js","sources":["src/components/q2-modal/q2-modal.scss?tag=q2-modal&encapsulation=shadow","src/components/q2-modal/q2-modal.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n@import './variables';\n\n@keyframes showBackdrop {\n from {\n opacity: 0;\n }\n}\n\n@keyframes hideBackdrop {\n to {\n opacity: 0;\n }\n}\n\n// CSS variables don't inherit into the ::backdrop pseudo-element\n$animation-tween: #{var-list(--tct-modal-tween, --app-tween-2, unquote('0.4s ease'))};\n\ndialog {\n --comp-border-radius-default: var(--app-scale-3x, 15px);\n --comp-border-radius: #{var-list(--tct-modal-border-radius, --comp-border-radius-default)};\n --comp-desktop-border-radius: #{var-list(--tct-modal-border-radius, --app-scale-3x, 15px)};\n --comp-close-button-size: #{var-list(--tct-modal-close-button-size, --t-a11y-min-size, 44px)};\n --comp-header-height: #{var-list(--tct-modal-header-height, --t-a11y-min-size, 44px)};\n --comp-dialog-background: #{var-list(--tct-modal-background, --t-base, #ffffff)};\n --comp-dialog-color: #{var-list(--tct-modal-color, --t-text, #4d4d4d)};\n --comp-dialog-padding: #{var-list(--tct-modal-padding, --app-scale-3x, 15px)};\n --comp-content-gradient-height: #{var-list(--tct-modal-content-gradient-height, --app-scale-2x, 10px)};\n --comp-dialog-gap: #{var-list(--tct-modal-gap, --app-scale-2x, 10px)};\n --comp-dialog-max-width: #{var-list(--tct-modal-max-width, 600px)};\n --comp-dialog-max-height: #{var-list(--tct-modal-max-height, 100vh)}; // should not use vh in the extension\n --comp-dialog-min-height: #{var-list(--tct-modal-min-height, 40vh)};\n --comp-dialog-box-shadow: #{var-list(\n --tct-modal-box-shadow,\n --app-shadow-2,\n unquote(\"0px 0px 2px rgba(0, 0, 0, 0.12), 0px 4px 8px rgba(0, 0, 0, 0.14)\")\n )};\n\n position: fixed;\n top: 100%;\n bottom: unset;\n color: var(--comp-dialog-color);\n background: var(--comp-dialog-background);\n transition: transform $animation-tween, opacity $animation-tween;\n width: 100%;\n max-width: var(--comp-dialog-max-width);\n border: 0;\n border-radius: var(--comp-border-radius);\n box-shadow: var(--comp-dialog-box-shadow);\n padding: 0;\n height: auto;\n overflow: hidden;\n &::backdrop {\n opacity: 0;\n background: var-list(--tct-modal-backdrop-background, --t-top-a2, rgba(13, 13, 13, 0.6));\n }\n\n &[open] {\n border-radius: var(--comp-desktop-border-radius);\n top: 0px;\n bottom: 0px;\n height: fit-content;\n transform: translateY(10%);\n opacity: 1;\n\n &.is-opening,\n &.is-open {\n opacity: 1;\n transform: translateY(0);\n &::backdrop {\n opacity: 1;\n animation: showBackdrop $animation-tween;\n }\n }\n\n &.is-closing {\n transform: translateY(10%);\n\n &::backdrop {\n animation: hideBackdrop $animation-tween;\n }\n }\n }\n}\n\n.content {\n overflow-y: auto;\n @include tiny-scrollbar();\n\n .icon {\n height: var-list(--tct-modal-icon-size, --app-scale-9x, 45px);\n margin: var-list(--tct-modal-icon-margin, --app-scale-2x, 10px);\n display: flex;\n justify-content: center;\n q2-icon {\n width: var-list(--tct-modal-icon-size, --app-scale-9x, 45px);\n }\n }\n .image {\n display: flex;\n justify-content: center;\n img {\n width: 100%;\n border-radius: var-list(--tct-modal-image-border-radius, --app-border-radius-2, 8px);\n }\n }\n .description {\n font-size: var-list(--tct-modal-description-font-size, 14px);\n }\n &.more-gradient {\n -webkit-mask-image: linear-gradient(to bottom, red 85%, transparent 100%);\n mask-image: linear-gradient(to bottom, red 85%, transparent 100%);\n }\n}\n\n.interior {\n display: grid;\n min-height: var(--comp-dialog-min-height);\n grid-template-rows: auto 1fr auto;\n gap: var(--comp-dialog-gap);\n max-height: calc(var(--comp-dialog-max-height) - var(--comp-dialog-padding));\n padding: var(--comp-dialog-padding);\n\n &.is-list {\n header,\n footer {\n position: relative;\n\n &:before {\n content: '';\n display: block;\n position: absolute;\n left: 0;\n height: var(--comp-content-gradient-height);\n width: 100%;\n z-index: 1;\n }\n }\n }\n}\n\nheader {\n display: flex;\n justify-content: space-between;\n align-items: center;\n .title {\n @include line-clamp(3);\n text-align: left;\n font-weight: var-list(--tct-modal-title-font-weight, 400);\n margin: 0;\n }\n\n .btn-close {\n grid-area: close;\n width: var(--comp-close-button-size);\n height: var(--comp-close-button-size);\n }\n}\n","import { Component, ComponentInterface, Prop, Method, h, State, Event, EventEmitter, Element } from '@stencil/core';\nimport { debounce, hasSlotContent, waitForNextPaint } from 'src/utils';\nimport sanitizeHTMLString from '@/utils/sanitize-html-string';\n\nimport type { ModalOption, ModalResponse } from 'q2-tecton-common/lib/types/modal';\n\n/**\n * @name Modal\n * @category Display\n * @summary Use for focused interactions that require user attention before continuing.\n * @slot content - A slot to display custom content in the modal body above the description.\n * @slot action - A slot to display up to four elements compatible with [Action Group](https://tecton.q2developer.com/design-system/q2-action-group) in the modal's footer.\n */\n@Component({ tag: 'q2-modal', shadow: true, styleUrl: 'q2-modal.scss' })\nexport class Q2Modal implements ComponentInterface {\n // #region Own Properties\n\n // to prevent background scroll when modal scrolls\n bodyOverflow: string = '';\n contentElement: HTMLDivElement;\n debouncedScroll: () => void;\n dialogElement: HTMLDialogElement;\n scheduledAfterRender: (() => void)[] = [];\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n maxActionButtons: number = 4;\n\n @State()\n renderStatus: 'is-open' | 'is-closing' | 'is-opening' = 'is-closing';\n\n // #endregion\n // #region Public Property API\n\n /**\n * Controls visibility of the close button in the top right corner.\n */\n @Prop({ reflect: true })\n closable: boolean = true;\n\n /**\n * Allows HTML markup as modal content, but it will be sanitized for security purposes.\n */\n @Prop()\n customMarkup: string;\n\n /**\n * A plain text description of the modal. Use this to provide context or information to the user.\n */\n @Prop()\n description: string;\n\n /**\n * The icon to display at the top of the modal. [See Icon documentation](https://tecton.q2developer.com/design-system/q2-icon).\n */\n @Prop()\n icon: string;\n\n /**\n * An image URL to be displayed beneath the title. It renders with 100% width.\n */\n @Prop({ reflect: true })\n imageSrc: string;\n\n /**\n * A plain text title of the modal displayed at the top.\n */\n @Prop({ mutable: true, reflect: true })\n title: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when one of action buttons is clicked.\n */\n @Event()\n tctClick: EventEmitter;\n\n /**\n * Emitted when the modal is closed.\n */\n @Event()\n tctClose: EventEmitter;\n\n /**\n * Emitted when the modal is opened.\n */\n @Event()\n tctOpen: EventEmitter;\n\n /**\n * Emitted when the modal has finished rendering.\n * @private\n */\n @Event({ bubbles: false })\n tctReady: EventEmitter;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.dialogElement.removeEventListener('cancel', this.onCancel);\n this.contentElement?.removeEventListener('scroll', this.debouncedScroll);\n }\n\n componentDidLoad() {\n this.dialogElement.addEventListener('cancel', this.onCancel);\n this.tctReady.emit();\n this.bodyOverflow = document.body.style.overflow;\n this.debouncedScroll = debounce(this.onContentScroll, 100);\n this.contentElement.addEventListener('scroll', this.debouncedScroll);\n }\n\n componentDidRender(): void {\n this.scheduledAfterRender?.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }\n\n // #endregion\n // #region Public Methods API\n\n @Method()\n async closeModal(data?: ModalResponse) {\n this.tctClose.emit(data);\n this.renderStatus = 'is-closing';\n document.body.style.overflow = this.bodyOverflow;\n this.dialogElement.addEventListener(\n 'transitionend',\n () => {\n if (this.renderStatus !== 'is-closing') return;\n this.dialogElement.close();\n this.renderStatus = null;\n },\n { once: true }\n );\n }\n\n @Method()\n async openModal(option?: ModalOption) {\n if (this.dialogElement?.open) return;\n this.tctOpen.emit(option);\n await waitForNextPaint();\n // overwrite the properties if option provided\n if (option) {\n this.title = option?.title || this.title;\n this.description = option?.description || this.description;\n this.imageSrc = option?.imageSrc || this.imageSrc;\n this.icon = option?.icon || this.icon;\n this.description = option?.description || this.description;\n }\n this.dialogElement.showModal();\n this.dialogElement.open = true;\n document.body.style.overflow = 'hidden';\n this.initializeModal();\n this.renderStatus = 'is-opening';\n this.dialogElement.addEventListener(\n 'transitionend',\n () => {\n if (this.renderStatus !== 'is-opening') return;\n this.renderStatus = 'is-open';\n },\n { once: true }\n );\n }\n\n // #endregion\n // #region Local Methods\n\n initializeModal = () => {\n // limits 4 buttons in action slot\n this.hostElement.querySelectorAll<HTMLElement>('[slot=\"action\"]').forEach((el, i) => {\n if (i >= this.maxActionButtons) {\n console.warn(\n `q2-modal allows up to ${this.maxActionButtons} action buttons, [${el.getAttribute('label') || el.textContent}] button is now hidden.`\n );\n el.hidden = true;\n }\n });\n this.contentElement.scrollTo({ top: 0 });\n this.debouncedScroll();\n };\n\n onCancel = (event: Event) => {\n event.preventDefault();\n this.closeModal();\n };\n\n onClick = (event: MouseEvent) => {\n event.stopPropagation();\n const eventTarget = event.target as HTMLElement;\n if (!(eventTarget instanceof HTMLElement)) return;\n const slot = eventTarget.getAttribute('slot');\n if (slot === 'action') {\n this.tctClick.emit({ value: eventTarget.dataset.value });\n this.onCancel(event);\n } else {\n const isInContent = !!eventTarget.closest('.interior , q2-modal');\n if (isInContent) return;\n this.onCancel(event);\n }\n };\n\n onContentScroll = () => {\n const scrollHeight = this.contentElement.scrollHeight;\n const scrollTop = Math.ceil(this.contentElement.scrollTop);\n const contentHeight = Math.ceil(this.contentElement.getBoundingClientRect()?.height || 0);\n // to show bottom gradient when more contents available\n if (scrollHeight > contentHeight) {\n scrollHeight <= contentHeight + scrollTop\n ? this.contentElement.classList.remove('more-gradient')\n : this.contentElement.classList.add('more-gradient');\n } else {\n this.contentElement.classList.remove('more-gradient');\n }\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n const interiorClasses = `interior`;\n const renderStatus = `${this.renderStatus || ''}`;\n return (\n <dialog\n ref={el => (this.dialogElement = el)}\n class={renderStatus}\n onClick={this.onClick}\n >\n <div class={interiorClasses}>\n {this.title && (\n <header>\n {this.title && <h2 class=\"title\">{this.title}</h2>}\n {!!this.closable && (\n <q2-btn\n class=\"btn-close\"\n test-id=\"btnClose\"\n onClick={this.onCancel}\n label=\"tecton.element.modal.close\"\n hide-label\n >\n <q2-icon type=\"close\" />\n </q2-btn>\n )}\n </header>\n )}\n <div\n class=\"content\"\n ref={el => (this.contentElement = el)}\n >\n {this.icon && (\n <div class=\"icon\">\n <q2-icon type={this.icon}></q2-icon>\n </div>\n )}\n {this.imageSrc && (\n <div class=\"image\">\n <img src={this.imageSrc}></img>\n </div>\n )}\n {hasSlotContent(this.hostElement, 'content') && <slot name=\"content\"></slot>}\n {this.description && <p class=\"description\">{this.description}</p>}\n {this.customMarkup && (\n <p\n class=\"customMarkup\"\n innerHTML={sanitizeHTMLString(this.customMarkup)}\n ></p>\n )}\n </div>\n <footer>\n <q2-action-group full-width>\n <slot name=\"action\"></slot>\n </q2-action-group>\n </footer>\n </div>\n </dialog>\n );\n }\n\n // #endregion\n}\n"],"names":[],"mappings":"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"}
@@ -1,14 +1,14 @@
1
- import { r as t, c as o, h as a, g as i } from "./index-CGkHOjh1.js";
1
+ import { r as t, c as o, h as i, g as a } from "./index-CGkHOjh1.js";
2
2
 
3
- import { e, w as r, h as s } from "./index-C4PILj1_.js";
3
+ import { e, w as r, h as s } from "./index-C5gj0T_3.js";
4
4
 
5
- import { s as d } from "./sanitize-html-string-B35VmRc9.js";
5
+ import { s as c } from "./sanitize-html-string-DPHNpMWE.js";
6
6
 
7
- const c = '*{box-sizing:border-box}*:active{outline:none}*:focus-visible{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}@keyframes showBackdrop{from{opacity:0}}@keyframes hideBackdrop{to{opacity:0}}dialog{--comp-border-radius-default:var(--app-scale-3x, 15px);--comp-border-radius:var(--tct-modal-border-radius, var(--comp-border-radius-default));--comp-desktop-border-radius:var(--tct-modal-border-radius, var(--app-scale-3x, 15px));--comp-close-button-size:var(--tct-modal-close-button-size, var(--t-a11y-min-size, 44px));--comp-header-height:var(--tct-modal-header-height, var(--t-a11y-min-size, 44px));--comp-dialog-background:var(--tct-modal-background, var(--t-base, #ffffff));--comp-dialog-color:var(--tct-modal-color, var(--t-text, #4d4d4d));--comp-dialog-padding:var(--tct-modal-padding, var(--app-scale-3x, 15px));--comp-content-gradient-height:var(--tct-modal-content-gradient-height, var(--app-scale-2x, 10px));--comp-dialog-gap:var(--tct-modal-gap, var(--app-scale-2x, 10px));--comp-dialog-max-width:var(--tct-modal-max-width, 600px);--comp-dialog-max-height:var(--tct-modal-max-height, 100vh);--comp-dialog-min-height:var(--tct-modal-min-height, 40vh);--comp-dialog-box-shadow:var(--tct-modal-box-shadow, var(--app-shadow-2, 0px 0px 2px rgba(0, 0, 0, 0.12), 0px 4px 8px rgba(0, 0, 0, 0.14)));position:fixed;top:100%;bottom:unset;color:var(--comp-dialog-color);background:var(--comp-dialog-background);transition:transform var(--tct-modal-tween, var(--app-tween-2, 0.4s ease)), opacity var(--tct-modal-tween, var(--app-tween-2, 0.4s ease));width:100%;max-width:var(--comp-dialog-max-width);border:0;border-radius:var(--comp-border-radius);box-shadow:var(--comp-dialog-box-shadow);padding:0;height:auto;overflow:hidden}dialog::backdrop{opacity:0;background:var(--tct-modal-backdrop-background, var(--t-top-a2, rgba(13, 13, 13, 0.6)))}dialog[open]{border-radius:var(--comp-desktop-border-radius);top:0px;bottom:0px;height:fit-content;transform:translateY(10%);opacity:1}dialog[open].is-opening,dialog[open].is-open{opacity:1;transform:translateY(0)}dialog[open].is-opening::backdrop,dialog[open].is-open::backdrop{opacity:1;animation:showBackdrop var(--tct-modal-tween, var(--app-tween-2, 0.4s ease))}dialog[open].is-closing{transform:translateY(10%)}dialog[open].is-closing::backdrop{animation:hideBackdrop var(--tct-modal-tween, var(--app-tween-2, 0.4s ease))}.content{overflow-y:auto;--comp-scrollbar-size:var(--tct-scrollbar-size, var(--t-scrollbar-size, var(--app-scale-1x, 5px)));--comp-scrollbar-border-radius:var(--tct-scrollbar-border-radius, var(--t-scrollbar-border-radius, var(--app-border-radius-1, 4px)));--comp-scrollbar-color:var(--tct-scrollbar-color, var(--t-scrollbar-color, var(--t-a11y-gray-color, #747474)));scrollbar-width:thin;scrollbar-color:var(--comp-scrollbar-color) transparent}.content::-webkit-scrollbar{width:var(--comp-scrollbar-size);height:var(--comp-scrollbar-size);margin:5px}.content::-webkit-scrollbar-thumb{background:var(--comp-scrollbar-color);border-radius:var(--comp-scrollbar-border-radius)}.content::-webkit-scrollbar-track{background:transparent;border-radius:var(--comp-scrollbar-border-radius)}.content .icon{height:var(--tct-modal-icon-size, var(--app-scale-9x, 45px));margin:var(--tct-modal-icon-margin, var(--app-scale-2x, 10px));display:flex;justify-content:center}.content .icon q2-icon{width:var(--tct-modal-icon-size, var(--app-scale-9x, 45px))}.content .image{display:flex;justify-content:center}.content .image img{width:100%;border-radius:var(--tct-modal-image-border-radius, var(--app-border-radius-2, 8px))}.content .description{font-size:var(--tct-modal-description-font-size, 14px)}.content.more-gradient{-webkit-mask-image:linear-gradient(to bottom, red 85%, transparent 100%);mask-image:linear-gradient(to bottom, red 85%, transparent 100%)}.interior{display:grid;min-height:var(--comp-dialog-min-height);grid-template-rows:auto 1fr auto;gap:var(--comp-dialog-gap);max-height:calc(var(--comp-dialog-max-height) - var(--comp-dialog-padding));padding:var(--comp-dialog-padding)}.interior.is-list header,.interior.is-list footer{position:relative}.interior.is-list header:before,.interior.is-list footer:before{content:"";display:block;position:absolute;left:0;height:var(--comp-content-gradient-height);width:100%;z-index:1}header{display:flex;justify-content:space-between;align-items:center}header .title{text-overflow:ellipsis;overflow:hidden;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;text-align:left;font-weight:var(--tct-modal-title-font-weight, 400);margin:0}header .btn-close{grid-area:close;width:var(--comp-close-button-size);height:var(--comp-close-button-size)}';
7
+ const n = '*{box-sizing:border-box}*:active{outline:none}*:focus-visible{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}@keyframes showBackdrop{from{opacity:0}}@keyframes hideBackdrop{to{opacity:0}}dialog{--comp-border-radius-default:var(--app-scale-3x, 15px);--comp-border-radius:var(--tct-modal-border-radius, var(--comp-border-radius-default));--comp-desktop-border-radius:var(--tct-modal-border-radius, var(--app-scale-3x, 15px));--comp-close-button-size:var(--tct-modal-close-button-size, var(--t-a11y-min-size, 44px));--comp-header-height:var(--tct-modal-header-height, var(--t-a11y-min-size, 44px));--comp-dialog-background:var(--tct-modal-background, var(--t-base, #ffffff));--comp-dialog-color:var(--tct-modal-color, var(--t-text, #4d4d4d));--comp-dialog-padding:var(--tct-modal-padding, var(--app-scale-3x, 15px));--comp-content-gradient-height:var(--tct-modal-content-gradient-height, var(--app-scale-2x, 10px));--comp-dialog-gap:var(--tct-modal-gap, var(--app-scale-2x, 10px));--comp-dialog-max-width:var(--tct-modal-max-width, 600px);--comp-dialog-max-height:var(--tct-modal-max-height, 100vh);--comp-dialog-min-height:var(--tct-modal-min-height, 40vh);--comp-dialog-box-shadow:var(--tct-modal-box-shadow, var(--app-shadow-2, 0px 0px 2px rgba(0, 0, 0, 0.12), 0px 4px 8px rgba(0, 0, 0, 0.14)));position:fixed;top:100%;bottom:unset;color:var(--comp-dialog-color);background:var(--comp-dialog-background);transition:transform var(--tct-modal-tween, var(--app-tween-2, 0.4s ease)), opacity var(--tct-modal-tween, var(--app-tween-2, 0.4s ease));width:100%;max-width:var(--comp-dialog-max-width);border:0;border-radius:var(--comp-border-radius);box-shadow:var(--comp-dialog-box-shadow);padding:0;height:auto;overflow:hidden}dialog::backdrop{opacity:0;background:var(--tct-modal-backdrop-background, var(--t-top-a2, rgba(13, 13, 13, 0.6)))}dialog[open]{border-radius:var(--comp-desktop-border-radius);top:0px;bottom:0px;height:fit-content;transform:translateY(10%);opacity:1}dialog[open].is-opening,dialog[open].is-open{opacity:1;transform:translateY(0)}dialog[open].is-opening::backdrop,dialog[open].is-open::backdrop{opacity:1;animation:showBackdrop var(--tct-modal-tween, var(--app-tween-2, 0.4s ease))}dialog[open].is-closing{transform:translateY(10%)}dialog[open].is-closing::backdrop{animation:hideBackdrop var(--tct-modal-tween, var(--app-tween-2, 0.4s ease))}.content{overflow-y:auto;--comp-scrollbar-size:var(--tct-scrollbar-size, var(--t-scrollbar-size, var(--app-scale-1x, 5px)));--comp-scrollbar-border-radius:var(--tct-scrollbar-border-radius, var(--t-scrollbar-border-radius, var(--app-border-radius-1, 4px)));--comp-scrollbar-color:var(--tct-scrollbar-color, var(--t-scrollbar-color, var(--t-a11y-gray-color, #747474)));scrollbar-width:thin;scrollbar-color:var(--comp-scrollbar-color) transparent}.content::-webkit-scrollbar{width:var(--comp-scrollbar-size);height:var(--comp-scrollbar-size);margin:5px}.content::-webkit-scrollbar-thumb{background:var(--comp-scrollbar-color);border-radius:var(--comp-scrollbar-border-radius)}.content::-webkit-scrollbar-track{background:transparent;border-radius:var(--comp-scrollbar-border-radius)}.content .icon{height:var(--tct-modal-icon-size, var(--app-scale-9x, 45px));margin:var(--tct-modal-icon-margin, var(--app-scale-2x, 10px));display:flex;justify-content:center}.content .icon q2-icon{width:var(--tct-modal-icon-size, var(--app-scale-9x, 45px))}.content .image{display:flex;justify-content:center}.content .image img{width:100%;border-radius:var(--tct-modal-image-border-radius, var(--app-border-radius-2, 8px))}.content .description{font-size:var(--tct-modal-description-font-size, 14px)}.content.more-gradient{-webkit-mask-image:linear-gradient(to bottom, red 85%, transparent 100%);mask-image:linear-gradient(to bottom, red 85%, transparent 100%)}.interior{display:grid;min-height:var(--comp-dialog-min-height);grid-template-rows:auto 1fr auto;gap:var(--comp-dialog-gap);max-height:calc(var(--comp-dialog-max-height) - var(--comp-dialog-padding));padding:var(--comp-dialog-padding)}.interior.is-list header,.interior.is-list footer{position:relative}.interior.is-list header:before,.interior.is-list footer:before{content:"";display:block;position:absolute;left:0;height:var(--comp-content-gradient-height);width:100%;z-index:1}header{display:flex;justify-content:space-between;align-items:center}header .title{text-overflow:ellipsis;overflow:hidden;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;text-align:left;font-weight:var(--tct-modal-title-font-weight, 400);margin:0}header .btn-close{grid-area:close;width:var(--comp-close-button-size);height:var(--comp-close-button-size)}';
8
8
 
9
- const n = class {
10
- constructor(a) {
11
- t(this, a);
9
+ const d = class {
10
+ constructor(i) {
11
+ t(this, i);
12
12
  this.tctClick = o(this, "tctClick", 7);
13
13
  this.tctClose = o(this, "tctClose", 7);
14
14
  this.tctOpen = o(this, "tctOpen", 7);
@@ -49,26 +49,26 @@ const n = class {
49
49
  t.stopPropagation();
50
50
  const o = t.target;
51
51
  if (!(o instanceof HTMLElement)) return;
52
- const a = o.getAttribute("slot");
53
- if (a === "action") {
52
+ const i = o.getAttribute("slot");
53
+ if (i === "action") {
54
54
  this.tctClick.emit({
55
55
  value: o.dataset.value
56
56
  });
57
57
  this.onCancel(t);
58
58
  } else {
59
- const a = !!o.closest(".interior , q2-modal");
60
- if (a) return;
59
+ const i = !!o.closest(".interior , q2-modal");
60
+ if (i) return;
61
61
  this.onCancel(t);
62
62
  }
63
63
  };
64
64
  this.onContentScroll = () => {
65
65
  var t;
66
66
  const o = this.contentElement.scrollHeight;
67
- const a = Math.ceil(this.contentElement.scrollTop);
68
- const i = Math.ceil(((t = this.contentElement.getBoundingClientRect()) === null || t === void 0 ? void 0 : t.height) || 0);
67
+ const i = Math.ceil(this.contentElement.scrollTop);
68
+ const a = Math.ceil(((t = this.contentElement.getBoundingClientRect()) === null || t === void 0 ? void 0 : t.height) || 0);
69
69
  // to show bottom gradient when more contents available
70
- if (o > i) {
71
- o <= i + a ? this.contentElement.classList.remove("more-gradient") : this.contentElement.classList.add("more-gradient");
70
+ if (o > a) {
71
+ o <= a + i ? this.contentElement.classList.remove("more-gradient") : this.contentElement.classList.add("more-gradient");
72
72
  } else {
73
73
  this.contentElement.classList.remove("more-gradient");
74
74
  }
@@ -137,72 +137,72 @@ const n = class {
137
137
  render() {
138
138
  const t = `interior`;
139
139
  const o = `${this.renderStatus || ""}`;
140
- return a("dialog", {
141
- key: "e7c16406478e632f39057feb8ab86029c2b6ddd7",
140
+ return i("dialog", {
141
+ key: "f07045cb3a3e85c9ebb018aba4693f1b547da800",
142
142
  ref: t => this.dialogElement = t,
143
143
  class: o,
144
144
  onClick: this.onClick
145
- }, a("div", {
146
- key: "b59510c6a97ac4f8e4820465919e364a924b82e1",
145
+ }, i("div", {
146
+ key: "215739e96bf781f3c9d7b1e67250820ccf858b75",
147
147
  class: t
148
- }, this.title && a("header", {
149
- key: "714904259d422f663d13aa27b715a2de9ab3b12b"
150
- }, this.title && a("h2", {
151
- key: "69e2f5f487b73fc84ff6e0ca1e9710d7c5f80938",
148
+ }, this.title && i("header", {
149
+ key: "77ce6f5b51a36f296fd110e3506c44ff94d72c48"
150
+ }, this.title && i("h2", {
151
+ key: "fe6c7e59889383c6af5615093e66c3837dd24bc4",
152
152
  class: "title"
153
- }, this.title), !!this.closable && a("q2-btn", {
154
- key: "e9258c375fd6f077f296a496a6a67903a39f3d8c",
153
+ }, this.title), !!this.closable && i("q2-btn", {
154
+ key: "8da0a4c5499caffd385bbf78f2010f77f8c35785",
155
155
  class: "btn-close",
156
156
  "test-id": "btnClose",
157
157
  onClick: this.onCancel,
158
158
  label: "tecton.element.modal.close",
159
159
  "hide-label": true
160
- }, a("q2-icon", {
161
- key: "4c07c70736c25e12d08d6f066507326bc333ad61",
160
+ }, i("q2-icon", {
161
+ key: "3526408cfbc99d56d74e3167624049a86dded3a4",
162
162
  type: "close"
163
- }))), a("div", {
164
- key: "a40c63b069c6f8c03682d8626f9a359cb5f7f7fa",
163
+ }))), i("div", {
164
+ key: "ce3c96886c1d28d78040401b3782892c5bda7399",
165
165
  class: "content",
166
166
  ref: t => this.contentElement = t
167
- }, this.icon && a("div", {
168
- key: "95bf4a48929080493ed1f375648aa8630931e3be",
167
+ }, this.icon && i("div", {
168
+ key: "e4bae20593b8877f9c713f5bf63e59574042735b",
169
169
  class: "icon"
170
- }, a("q2-icon", {
171
- key: "8e7d34940323c625e61eea7509d829d298af82a0",
170
+ }, i("q2-icon", {
171
+ key: "466a83589286d503c6a5a36ba1999a73df951c19",
172
172
  type: this.icon
173
- })), this.imageSrc && a("div", {
174
- key: "9f6fbbd59c14cc5ee93601db161dd7c748e3b5a6",
173
+ })), this.imageSrc && i("div", {
174
+ key: "56a0e413b40319b7a40e79136575ee8849c339c6",
175
175
  class: "image"
176
- }, a("img", {
177
- key: "d97eb1d2dae996c2bcacddf840b984f1ffe05847",
176
+ }, i("img", {
177
+ key: "0d32cee3447aa42273a816c4cd8941d5df62b3b2",
178
178
  src: this.imageSrc
179
- })), s(this.hostElement, "content") && a("slot", {
180
- key: "b7b66ddb181aa333fb88496984a6f35a34077baf",
179
+ })), s(this.hostElement, "content") && i("slot", {
180
+ key: "3687527d29977c662dd480e6fb9727f47eb3522a",
181
181
  name: "content"
182
- }), this.description && a("p", {
183
- key: "54dc54b11c8c351b760afc35c714d35277b3e463",
182
+ }), this.description && i("p", {
183
+ key: "34b49f5bb615192deec83726391b66680541eb12",
184
184
  class: "description"
185
- }, this.description), this.customMarkup && a("p", {
186
- key: "11e8922a3e277f6bb21c8cbcaf1be19de07d3a54",
185
+ }, this.description), this.customMarkup && i("p", {
186
+ key: "a44e20822b497cc95e2ad16430f3e3e27f1c164a",
187
187
  class: "customMarkup",
188
- innerHTML: d(this.customMarkup)
189
- })), a("footer", {
190
- key: "f90f8a5569be4c1660c25388a9082e2e40a3e11d"
191
- }, a("q2-action-group", {
192
- key: "34254d2e03a6093e53324c3d98b0eb2ede3b14f2",
188
+ innerHTML: c(this.customMarkup)
189
+ })), i("footer", {
190
+ key: "ae01296dc46f5502b1cdfa7b1949639df942c124"
191
+ }, i("q2-action-group", {
192
+ key: "b89615558a7129659ce1574cc026c2bc4d728e8b",
193
193
  "full-width": true
194
- }, a("slot", {
195
- key: "a34ad5fa37fc258bd2863f2fd191acdac05de9cb",
194
+ }, i("slot", {
195
+ key: "f12ed356d57b290222a5dab301c83a85fbdc9c34",
196
196
  name: "action"
197
197
  })))));
198
198
  }
199
199
  get hostElement() {
200
- return i(this);
200
+ return a(this);
201
201
  }
202
202
  };
203
203
 
204
- n.style = c;
204
+ d.style = n;
205
205
 
206
- export { n as q2_modal };
206
+ export { d as q2_modal };
207
207
  //# sourceMappingURL=q2-modal.entry.esm.js.map
208
208
  //# sourceMappingURL=q2-modal.entry.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["q2ModalCss","Q2Modal","constructor","hostRef","this","bodyOverflow","scheduledAfterRender","maxActionButtons","renderStatus","closable","initializeModal","hostElement","querySelectorAll","forEach","el","i","console","warn","getAttribute","textContent","hidden","contentElement","scrollTo","top","debouncedScroll","onCancel","event","preventDefault","closeModal","onClick","stopPropagation","eventTarget","target","HTMLElement","slot","tctClick","emit","value","dataset","isInContent","closest","onContentScroll","scrollHeight","scrollTop","Math","ceil","contentHeight","_a","getBoundingClientRect","height","classList","remove","add","disconnectedCallback","dialogElement","removeEventListener","componentDidLoad","addEventListener","tctReady","document","body","style","overflow","debounce","componentDidRender","fn","data","tctClose","close","once","openModal","option","open","tctOpen","waitForNextPaint","title","description","imageSrc","icon","showModal","render","interiorClasses","h","key","ref","class","label","type","src","hasSlotContent","name","customMarkup","innerHTML","sanitizeHTMLString"],"sources":["src/components/q2-modal/q2-modal.scss?tag=q2-modal&encapsulation=shadow","src/components/q2-modal/q2-modal.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n@keyframes showBackdrop {\n from {\n opacity: 0;\n }\n}\n\n@keyframes hideBackdrop {\n to {\n opacity: 0;\n }\n}\n\n// CSS variables don't inherit into the ::backdrop pseudo-element\n$animation-tween: #{var-list(--tct-modal-tween, --app-tween-2, unquote('0.4s ease'))};\n\ndialog {\n --comp-border-radius-default: var(--app-scale-3x, 15px);\n --comp-border-radius: #{var-list(--tct-modal-border-radius, --comp-border-radius-default)};\n --comp-desktop-border-radius: #{var-list(--tct-modal-border-radius, --app-scale-3x, 15px)};\n --comp-close-button-size: #{var-list(--tct-modal-close-button-size, --t-a11y-min-size, 44px)};\n --comp-header-height: #{var-list(--tct-modal-header-height, --t-a11y-min-size, 44px)};\n --comp-dialog-background: #{var-list(--tct-modal-background, --t-base, #ffffff)};\n --comp-dialog-color: #{var-list(--tct-modal-color, --t-text, #4d4d4d)};\n --comp-dialog-padding: #{var-list(--tct-modal-padding, --app-scale-3x, 15px)};\n --comp-content-gradient-height: #{var-list(--tct-modal-content-gradient-height, --app-scale-2x, 10px)};\n --comp-dialog-gap: #{var-list(--tct-modal-gap, --app-scale-2x, 10px)};\n --comp-dialog-max-width: #{var-list(--tct-modal-max-width, 600px)};\n --comp-dialog-max-height: #{var-list(--tct-modal-max-height, 100vh)}; // should not use vh in the extension\n --comp-dialog-min-height: #{var-list(--tct-modal-min-height, 40vh)};\n --comp-dialog-box-shadow: #{var-list(\n --tct-modal-box-shadow,\n --app-shadow-2,\n unquote(\"0px 0px 2px rgba(0, 0, 0, 0.12), 0px 4px 8px rgba(0, 0, 0, 0.14)\")\n )};\n\n position: fixed;\n top: 100%;\n bottom: unset;\n color: var(--comp-dialog-color);\n background: var(--comp-dialog-background);\n transition: transform $animation-tween, opacity $animation-tween;\n width: 100%;\n max-width: var(--comp-dialog-max-width);\n border: 0;\n border-radius: var(--comp-border-radius);\n box-shadow: var(--comp-dialog-box-shadow);\n padding: 0;\n height: auto;\n overflow: hidden;\n &::backdrop {\n opacity: 0;\n background: var-list(--tct-modal-backdrop-background, --t-top-a2, rgba(13, 13, 13, 0.6));\n }\n\n &[open] {\n border-radius: var(--comp-desktop-border-radius);\n top: 0px;\n bottom: 0px;\n height: fit-content;\n transform: translateY(10%);\n opacity: 1;\n\n &.is-opening,\n &.is-open {\n opacity: 1;\n transform: translateY(0);\n &::backdrop {\n opacity: 1;\n animation: showBackdrop $animation-tween;\n }\n }\n\n &.is-closing {\n transform: translateY(10%);\n\n &::backdrop {\n animation: hideBackdrop $animation-tween;\n }\n }\n }\n}\n\n.content {\n overflow-y: auto;\n @include tiny-scrollbar();\n\n .icon {\n height: var-list(--tct-modal-icon-size --app-scale-9x, 45px);\n margin: var-list(--tct-modal-icon-margin, --app-scale-2x, 10px);\n display: flex;\n justify-content: center;\n q2-icon {\n width: var-list(--tct-modal-icon-size --app-scale-9x, 45px);\n }\n }\n .image {\n display: flex;\n justify-content: center;\n img {\n width: 100%;\n border-radius: var-list(--tct-modal-image-border-radius, --app-border-radius-2, 8px);\n }\n }\n .description {\n font-size: var-list(--tct-modal-description-font-size, 14px);\n }\n &.more-gradient {\n -webkit-mask-image: linear-gradient(to bottom, red 85%, transparent 100%);\n mask-image: linear-gradient(to bottom, red 85%, transparent 100%);\n }\n}\n\n.interior {\n display: grid;\n min-height: var(--comp-dialog-min-height);\n grid-template-rows: auto 1fr auto;\n gap: var(--comp-dialog-gap);\n max-height: calc(var(--comp-dialog-max-height) - var(--comp-dialog-padding));\n padding: var(--comp-dialog-padding);\n\n &.is-list {\n header,\n footer {\n position: relative;\n\n &:before {\n content: '';\n display: block;\n position: absolute;\n left: 0;\n height: var(--comp-content-gradient-height);\n width: 100%;\n z-index: 1;\n }\n }\n }\n}\n\nheader {\n display: flex;\n justify-content: space-between;\n align-items: center;\n .title {\n @include line-clamp(3);\n text-align: left;\n font-weight: var-list(--tct-modal-title-font-weight, 400);\n margin: 0;\n }\n\n .btn-close {\n grid-area: close;\n width: var(--comp-close-button-size);\n height: var(--comp-close-button-size);\n }\n}\n","import { Component, ComponentInterface, Prop, Method, h, State, Event, EventEmitter, Element } from '@stencil/core';\nimport { debounce, hasSlotContent, waitForNextPaint } from 'src/utils';\nimport sanitizeHTMLString from '@/utils/sanitize-html-string';\n\nimport type { ModalOption, ModalResponse } from 'q2-tecton-common/lib/types/modal';\n\n/**\n * @name Modal\n * @category Display\n * @summary Use for focused interactions that require user attention before continuing.\n * @slot content - A slot to display custom content in the modal body above the description.\n * @slot action - A slot to display up to four elements compatible with [Action Group](https://tecton.q2developer.com/design-system/q2-action-group) in the modal's footer.\n */\n@Component({ tag: 'q2-modal', shadow: true, styleUrl: 'q2-modal.scss' })\nexport class Q2Modal implements ComponentInterface {\n // #region Own Properties\n\n // to prevent background scroll when modal scrolls\n bodyOverflow: string = '';\n contentElement: HTMLDivElement;\n debouncedScroll: () => void;\n dialogElement: HTMLDialogElement;\n scheduledAfterRender: (() => void)[] = [];\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n maxActionButtons: number = 4;\n\n @State()\n renderStatus: 'is-open' | 'is-closing' | 'is-opening' = 'is-closing';\n\n // #endregion\n // #region Public Property API\n\n /**\n * Controls visibility of the close button in the top right corner.\n */\n @Prop({ reflect: true })\n closable: boolean = true;\n\n /**\n * Allows HTML markup as modal content, but it will be sanitized for security purposes.\n */\n @Prop()\n customMarkup: string;\n\n /**\n * A plain text description of the modal. Use this to provide context or information to the user.\n */\n @Prop()\n description: string;\n\n /**\n * The icon to display at the top of the modal. [See Icon documentation](https://tecton.q2developer.com/design-system/q2-icon).\n */\n @Prop()\n icon: string;\n\n /**\n * An image URL to be displayed beneath the title. It renders with 100% width.\n */\n @Prop({ reflect: true })\n imageSrc: string;\n\n /**\n * A plain text title of the modal displayed at the top.\n */\n @Prop({ mutable: true, reflect: true })\n title: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when one of action buttons is clicked.\n */\n @Event()\n tctClick: EventEmitter;\n\n /**\n * Emitted when the modal is closed.\n */\n @Event()\n tctClose: EventEmitter;\n\n /**\n * Emitted when the modal is opened.\n */\n @Event()\n tctOpen: EventEmitter;\n\n /**\n * Emitted when the modal has finished rendering.\n * @private\n */\n @Event({ bubbles: false })\n tctReady: EventEmitter;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.dialogElement.removeEventListener('cancel', this.onCancel);\n this.contentElement?.removeEventListener('scroll', this.debouncedScroll);\n }\n\n componentDidLoad() {\n this.dialogElement.addEventListener('cancel', this.onCancel);\n this.tctReady.emit();\n this.bodyOverflow = document.body.style.overflow;\n this.debouncedScroll = debounce(this.onContentScroll, 100);\n this.contentElement.addEventListener('scroll', this.debouncedScroll);\n }\n\n componentDidRender(): void {\n this.scheduledAfterRender?.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }\n\n // #endregion\n // #region Public Methods API\n\n @Method()\n async closeModal(data?: ModalResponse) {\n this.tctClose.emit(data);\n this.renderStatus = 'is-closing';\n document.body.style.overflow = this.bodyOverflow;\n this.dialogElement.addEventListener(\n 'transitionend',\n () => {\n if (this.renderStatus !== 'is-closing') return;\n this.dialogElement.close();\n this.renderStatus = null;\n },\n { once: true }\n );\n }\n\n @Method()\n async openModal(option?: ModalOption) {\n if (this.dialogElement?.open) return;\n this.tctOpen.emit(option);\n await waitForNextPaint();\n // overwrite the properties if option provided\n if (option) {\n this.title = option?.title || this.title;\n this.description = option?.description || this.description;\n this.imageSrc = option?.imageSrc || this.imageSrc;\n this.icon = option?.icon || this.icon;\n this.description = option?.description || this.description;\n }\n this.dialogElement.showModal();\n this.dialogElement.open = true;\n document.body.style.overflow = 'hidden';\n this.initializeModal();\n this.renderStatus = 'is-opening';\n this.dialogElement.addEventListener(\n 'transitionend',\n () => {\n if (this.renderStatus !== 'is-opening') return;\n this.renderStatus = 'is-open';\n },\n { once: true }\n );\n }\n\n // #endregion\n // #region Local Methods\n\n initializeModal = () => {\n // limits 4 buttons in action slot\n this.hostElement.querySelectorAll<HTMLElement>('[slot=\"action\"]').forEach((el, i) => {\n if (i >= this.maxActionButtons) {\n console.warn(\n `q2-modal allows up to ${this.maxActionButtons} action buttons, [${el.getAttribute('label') || el.textContent}] button is now hidden.`\n );\n el.hidden = true;\n }\n });\n this.contentElement.scrollTo({ top: 0 });\n this.debouncedScroll();\n };\n\n onCancel = (event: Event) => {\n event.preventDefault();\n this.closeModal();\n };\n\n onClick = (event: MouseEvent) => {\n event.stopPropagation();\n const eventTarget = event.target as HTMLElement;\n if (!(eventTarget instanceof HTMLElement)) return;\n const slot = eventTarget.getAttribute('slot');\n if (slot === 'action') {\n this.tctClick.emit({ value: eventTarget.dataset.value });\n this.onCancel(event);\n } else {\n const isInContent = !!eventTarget.closest('.interior , q2-modal');\n if (isInContent) return;\n this.onCancel(event);\n }\n };\n\n onContentScroll = () => {\n const scrollHeight = this.contentElement.scrollHeight;\n const scrollTop = Math.ceil(this.contentElement.scrollTop);\n const contentHeight = Math.ceil(this.contentElement.getBoundingClientRect()?.height || 0);\n // to show bottom gradient when more contents available\n if (scrollHeight > contentHeight) {\n scrollHeight <= contentHeight + scrollTop\n ? this.contentElement.classList.remove('more-gradient')\n : this.contentElement.classList.add('more-gradient');\n } else {\n this.contentElement.classList.remove('more-gradient');\n }\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n const interiorClasses = `interior`;\n const renderStatus = `${this.renderStatus || ''}`;\n return (\n <dialog\n ref={el => (this.dialogElement = el)}\n class={renderStatus}\n onClick={this.onClick}\n >\n <div class={interiorClasses}>\n {this.title && (\n <header>\n {this.title && <h2 class=\"title\">{this.title}</h2>}\n {!!this.closable && (\n <q2-btn\n class=\"btn-close\"\n test-id=\"btnClose\"\n onClick={this.onCancel}\n label=\"tecton.element.modal.close\"\n hide-label\n >\n <q2-icon type=\"close\" />\n </q2-btn>\n )}\n </header>\n )}\n <div\n class=\"content\"\n ref={el => (this.contentElement = el)}\n >\n {this.icon && (\n <div class=\"icon\">\n <q2-icon type={this.icon}></q2-icon>\n </div>\n )}\n {this.imageSrc && (\n <div class=\"image\">\n <img src={this.imageSrc}></img>\n </div>\n )}\n {hasSlotContent(this.hostElement, 'content') && <slot name=\"content\"></slot>}\n {this.description && <p class=\"description\">{this.description}</p>}\n {this.customMarkup && (\n <p\n class=\"customMarkup\"\n innerHTML={sanitizeHTMLString(this.customMarkup)}\n ></p>\n )}\n </div>\n <footer>\n <q2-action-group full-width>\n <slot name=\"action\"></slot>\n </q2-action-group>\n </footer>\n </div>\n </dialog>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["q2ModalCss","Q2Modal","constructor","hostRef","this","bodyOverflow","scheduledAfterRender","maxActionButtons","renderStatus","closable","initializeModal","hostElement","querySelectorAll","forEach","el","i","console","warn","getAttribute","textContent","hidden","contentElement","scrollTo","top","debouncedScroll","onCancel","event","preventDefault","closeModal","onClick","stopPropagation","eventTarget","target","HTMLElement","slot","tctClick","emit","value","dataset","isInContent","closest","onContentScroll","scrollHeight","scrollTop","Math","ceil","contentHeight","_a","getBoundingClientRect","height","classList","remove","add","disconnectedCallback","dialogElement","removeEventListener","componentDidLoad","addEventListener","tctReady","document","body","style","overflow","debounce","componentDidRender","fn","data","tctClose","close","once","openModal","option","open","tctOpen","waitForNextPaint","title","description","imageSrc","icon","showModal","render","interiorClasses","h","key","ref","class","label","type","src","hasSlotContent","name","customMarkup","innerHTML","sanitizeHTMLString"],"sources":["src/components/q2-modal/q2-modal.scss?tag=q2-modal&encapsulation=shadow","src/components/q2-modal/q2-modal.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n@import './variables';\n\n@keyframes showBackdrop {\n from {\n opacity: 0;\n }\n}\n\n@keyframes hideBackdrop {\n to {\n opacity: 0;\n }\n}\n\n// CSS variables don't inherit into the ::backdrop pseudo-element\n$animation-tween: #{var-list(--tct-modal-tween, --app-tween-2, unquote('0.4s ease'))};\n\ndialog {\n --comp-border-radius-default: var(--app-scale-3x, 15px);\n --comp-border-radius: #{var-list(--tct-modal-border-radius, --comp-border-radius-default)};\n --comp-desktop-border-radius: #{var-list(--tct-modal-border-radius, --app-scale-3x, 15px)};\n --comp-close-button-size: #{var-list(--tct-modal-close-button-size, --t-a11y-min-size, 44px)};\n --comp-header-height: #{var-list(--tct-modal-header-height, --t-a11y-min-size, 44px)};\n --comp-dialog-background: #{var-list(--tct-modal-background, --t-base, #ffffff)};\n --comp-dialog-color: #{var-list(--tct-modal-color, --t-text, #4d4d4d)};\n --comp-dialog-padding: #{var-list(--tct-modal-padding, --app-scale-3x, 15px)};\n --comp-content-gradient-height: #{var-list(--tct-modal-content-gradient-height, --app-scale-2x, 10px)};\n --comp-dialog-gap: #{var-list(--tct-modal-gap, --app-scale-2x, 10px)};\n --comp-dialog-max-width: #{var-list(--tct-modal-max-width, 600px)};\n --comp-dialog-max-height: #{var-list(--tct-modal-max-height, 100vh)}; // should not use vh in the extension\n --comp-dialog-min-height: #{var-list(--tct-modal-min-height, 40vh)};\n --comp-dialog-box-shadow: #{var-list(\n --tct-modal-box-shadow,\n --app-shadow-2,\n unquote(\"0px 0px 2px rgba(0, 0, 0, 0.12), 0px 4px 8px rgba(0, 0, 0, 0.14)\")\n )};\n\n position: fixed;\n top: 100%;\n bottom: unset;\n color: var(--comp-dialog-color);\n background: var(--comp-dialog-background);\n transition: transform $animation-tween, opacity $animation-tween;\n width: 100%;\n max-width: var(--comp-dialog-max-width);\n border: 0;\n border-radius: var(--comp-border-radius);\n box-shadow: var(--comp-dialog-box-shadow);\n padding: 0;\n height: auto;\n overflow: hidden;\n &::backdrop {\n opacity: 0;\n background: var-list(--tct-modal-backdrop-background, --t-top-a2, rgba(13, 13, 13, 0.6));\n }\n\n &[open] {\n border-radius: var(--comp-desktop-border-radius);\n top: 0px;\n bottom: 0px;\n height: fit-content;\n transform: translateY(10%);\n opacity: 1;\n\n &.is-opening,\n &.is-open {\n opacity: 1;\n transform: translateY(0);\n &::backdrop {\n opacity: 1;\n animation: showBackdrop $animation-tween;\n }\n }\n\n &.is-closing {\n transform: translateY(10%);\n\n &::backdrop {\n animation: hideBackdrop $animation-tween;\n }\n }\n }\n}\n\n.content {\n overflow-y: auto;\n @include tiny-scrollbar();\n\n .icon {\n height: var-list(--tct-modal-icon-size, --app-scale-9x, 45px);\n margin: var-list(--tct-modal-icon-margin, --app-scale-2x, 10px);\n display: flex;\n justify-content: center;\n q2-icon {\n width: var-list(--tct-modal-icon-size, --app-scale-9x, 45px);\n }\n }\n .image {\n display: flex;\n justify-content: center;\n img {\n width: 100%;\n border-radius: var-list(--tct-modal-image-border-radius, --app-border-radius-2, 8px);\n }\n }\n .description {\n font-size: var-list(--tct-modal-description-font-size, 14px);\n }\n &.more-gradient {\n -webkit-mask-image: linear-gradient(to bottom, red 85%, transparent 100%);\n mask-image: linear-gradient(to bottom, red 85%, transparent 100%);\n }\n}\n\n.interior {\n display: grid;\n min-height: var(--comp-dialog-min-height);\n grid-template-rows: auto 1fr auto;\n gap: var(--comp-dialog-gap);\n max-height: calc(var(--comp-dialog-max-height) - var(--comp-dialog-padding));\n padding: var(--comp-dialog-padding);\n\n &.is-list {\n header,\n footer {\n position: relative;\n\n &:before {\n content: '';\n display: block;\n position: absolute;\n left: 0;\n height: var(--comp-content-gradient-height);\n width: 100%;\n z-index: 1;\n }\n }\n }\n}\n\nheader {\n display: flex;\n justify-content: space-between;\n align-items: center;\n .title {\n @include line-clamp(3);\n text-align: left;\n font-weight: var-list(--tct-modal-title-font-weight, 400);\n margin: 0;\n }\n\n .btn-close {\n grid-area: close;\n width: var(--comp-close-button-size);\n height: var(--comp-close-button-size);\n }\n}\n","import { Component, ComponentInterface, Prop, Method, h, State, Event, EventEmitter, Element } from '@stencil/core';\nimport { debounce, hasSlotContent, waitForNextPaint } from 'src/utils';\nimport sanitizeHTMLString from '@/utils/sanitize-html-string';\n\nimport type { ModalOption, ModalResponse } from 'q2-tecton-common/lib/types/modal';\n\n/**\n * @name Modal\n * @category Display\n * @summary Use for focused interactions that require user attention before continuing.\n * @slot content - A slot to display custom content in the modal body above the description.\n * @slot action - A slot to display up to four elements compatible with [Action Group](https://tecton.q2developer.com/design-system/q2-action-group) in the modal's footer.\n */\n@Component({ tag: 'q2-modal', shadow: true, styleUrl: 'q2-modal.scss' })\nexport class Q2Modal implements ComponentInterface {\n // #region Own Properties\n\n // to prevent background scroll when modal scrolls\n bodyOverflow: string = '';\n contentElement: HTMLDivElement;\n debouncedScroll: () => void;\n dialogElement: HTMLDialogElement;\n scheduledAfterRender: (() => void)[] = [];\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n maxActionButtons: number = 4;\n\n @State()\n renderStatus: 'is-open' | 'is-closing' | 'is-opening' = 'is-closing';\n\n // #endregion\n // #region Public Property API\n\n /**\n * Controls visibility of the close button in the top right corner.\n */\n @Prop({ reflect: true })\n closable: boolean = true;\n\n /**\n * Allows HTML markup as modal content, but it will be sanitized for security purposes.\n */\n @Prop()\n customMarkup: string;\n\n /**\n * A plain text description of the modal. Use this to provide context or information to the user.\n */\n @Prop()\n description: string;\n\n /**\n * The icon to display at the top of the modal. [See Icon documentation](https://tecton.q2developer.com/design-system/q2-icon).\n */\n @Prop()\n icon: string;\n\n /**\n * An image URL to be displayed beneath the title. It renders with 100% width.\n */\n @Prop({ reflect: true })\n imageSrc: string;\n\n /**\n * A plain text title of the modal displayed at the top.\n */\n @Prop({ mutable: true, reflect: true })\n title: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when one of action buttons is clicked.\n */\n @Event()\n tctClick: EventEmitter;\n\n /**\n * Emitted when the modal is closed.\n */\n @Event()\n tctClose: EventEmitter;\n\n /**\n * Emitted when the modal is opened.\n */\n @Event()\n tctOpen: EventEmitter;\n\n /**\n * Emitted when the modal has finished rendering.\n * @private\n */\n @Event({ bubbles: false })\n tctReady: EventEmitter;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.dialogElement.removeEventListener('cancel', this.onCancel);\n this.contentElement?.removeEventListener('scroll', this.debouncedScroll);\n }\n\n componentDidLoad() {\n this.dialogElement.addEventListener('cancel', this.onCancel);\n this.tctReady.emit();\n this.bodyOverflow = document.body.style.overflow;\n this.debouncedScroll = debounce(this.onContentScroll, 100);\n this.contentElement.addEventListener('scroll', this.debouncedScroll);\n }\n\n componentDidRender(): void {\n this.scheduledAfterRender?.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }\n\n // #endregion\n // #region Public Methods API\n\n @Method()\n async closeModal(data?: ModalResponse) {\n this.tctClose.emit(data);\n this.renderStatus = 'is-closing';\n document.body.style.overflow = this.bodyOverflow;\n this.dialogElement.addEventListener(\n 'transitionend',\n () => {\n if (this.renderStatus !== 'is-closing') return;\n this.dialogElement.close();\n this.renderStatus = null;\n },\n { once: true }\n );\n }\n\n @Method()\n async openModal(option?: ModalOption) {\n if (this.dialogElement?.open) return;\n this.tctOpen.emit(option);\n await waitForNextPaint();\n // overwrite the properties if option provided\n if (option) {\n this.title = option?.title || this.title;\n this.description = option?.description || this.description;\n this.imageSrc = option?.imageSrc || this.imageSrc;\n this.icon = option?.icon || this.icon;\n this.description = option?.description || this.description;\n }\n this.dialogElement.showModal();\n this.dialogElement.open = true;\n document.body.style.overflow = 'hidden';\n this.initializeModal();\n this.renderStatus = 'is-opening';\n this.dialogElement.addEventListener(\n 'transitionend',\n () => {\n if (this.renderStatus !== 'is-opening') return;\n this.renderStatus = 'is-open';\n },\n { once: true }\n );\n }\n\n // #endregion\n // #region Local Methods\n\n initializeModal = () => {\n // limits 4 buttons in action slot\n this.hostElement.querySelectorAll<HTMLElement>('[slot=\"action\"]').forEach((el, i) => {\n if (i >= this.maxActionButtons) {\n console.warn(\n `q2-modal allows up to ${this.maxActionButtons} action buttons, [${el.getAttribute('label') || el.textContent}] button is now hidden.`\n );\n el.hidden = true;\n }\n });\n this.contentElement.scrollTo({ top: 0 });\n this.debouncedScroll();\n };\n\n onCancel = (event: Event) => {\n event.preventDefault();\n this.closeModal();\n };\n\n onClick = (event: MouseEvent) => {\n event.stopPropagation();\n const eventTarget = event.target as HTMLElement;\n if (!(eventTarget instanceof HTMLElement)) return;\n const slot = eventTarget.getAttribute('slot');\n if (slot === 'action') {\n this.tctClick.emit({ value: eventTarget.dataset.value });\n this.onCancel(event);\n } else {\n const isInContent = !!eventTarget.closest('.interior , q2-modal');\n if (isInContent) return;\n this.onCancel(event);\n }\n };\n\n onContentScroll = () => {\n const scrollHeight = this.contentElement.scrollHeight;\n const scrollTop = Math.ceil(this.contentElement.scrollTop);\n const contentHeight = Math.ceil(this.contentElement.getBoundingClientRect()?.height || 0);\n // to show bottom gradient when more contents available\n if (scrollHeight > contentHeight) {\n scrollHeight <= contentHeight + scrollTop\n ? this.contentElement.classList.remove('more-gradient')\n : this.contentElement.classList.add('more-gradient');\n } else {\n this.contentElement.classList.remove('more-gradient');\n }\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n const interiorClasses = `interior`;\n const renderStatus = `${this.renderStatus || ''}`;\n return (\n <dialog\n ref={el => (this.dialogElement = el)}\n class={renderStatus}\n onClick={this.onClick}\n >\n <div class={interiorClasses}>\n {this.title && (\n <header>\n {this.title && <h2 class=\"title\">{this.title}</h2>}\n {!!this.closable && (\n <q2-btn\n class=\"btn-close\"\n test-id=\"btnClose\"\n onClick={this.onCancel}\n label=\"tecton.element.modal.close\"\n hide-label\n >\n <q2-icon type=\"close\" />\n </q2-btn>\n )}\n </header>\n )}\n <div\n class=\"content\"\n ref={el => (this.contentElement = el)}\n >\n {this.icon && (\n <div class=\"icon\">\n <q2-icon type={this.icon}></q2-icon>\n </div>\n )}\n {this.imageSrc && (\n <div class=\"image\">\n <img src={this.imageSrc}></img>\n </div>\n )}\n {hasSlotContent(this.hostElement, 'content') && <slot name=\"content\"></slot>}\n {this.description && <p class=\"description\">{this.description}</p>}\n {this.customMarkup && (\n <p\n class=\"customMarkup\"\n innerHTML={sanitizeHTMLString(this.customMarkup)}\n ></p>\n )}\n </div>\n <footer>\n <q2-action-group full-width>\n <slot name=\"action\"></slot>\n </q2-action-group>\n </footer>\n </div>\n </dialog>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  import { r as t, c as e, h as n, g as o } from "./index-CGkHOjh1.js";
2
2
 
3
- import { l as i, o as a } from "./index-C4PILj1_.js";
3
+ import { l as i, o as a } from "./index-C5gj0T_3.js";
4
4
 
5
5
  const r = "*{box-sizing:border-box}*:active{outline:none}*:focus-visible{outline:none;box-shadow:var(--const-double-focus-ring, 0 0 0 2px #ffffff, 0 0 0 4px #0066cc)}:host{box-shadow:none !important}::-moz-focus-inner{border:none}input,textarea,button{font-family:inherit;font-size:inherit;font-stretch:inherit}:host(.sr),:host(.sr) button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.sr,.sr button{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none}:host([hidden]){display:none}.invisible{visibility:hidden}.month-container{--comp-month-primary-background:var(--tct-btn-primary-background, var(--tct-btn-primary-bg, var(--t-btn-primary-bg, #2e2e2e)));--comp-month-primary-font-color:var(--tct-btn-primary-font-color, var(--t-btn-primary-font-color, var(--tct-white, var(--app-white, #ffffff))));--comp-month-primary-background:var(--tct-btn-secondary-background, var(--tct-btn-secondary-bg, var(--t-button-default-bg, #cccccc)));--comp-month-secondary-font-color:var(--tct-btn-secondary-font-color, var(--t-btn-secondary-font-color, var(--t-button-default-font-color, #2e2e2e)))}.month-container .navigation{display:flex;justify-content:space-between;flex-direction:row}.month-container .navigation .year-btn{padding:0 1rem;display:flex;align-items:center}.month-container .navigation .year-btn .year{margin-right:0.2rem}.month-container .navigation .year-btn .year-icon{--t-icon-stroke-width:2px;width:16px;height:16px;transition:all 0.3s ease-in-out}.month-container .navigation .year-btn .year-icon.on{transform:rotate(-180deg)}.month-container .navigation .month-controller{display:flex;align-items:center}.month-container .month-list{display:grid;grid-template-columns:auto auto auto}.month-container .month-list .month{display:flex;justify-content:center;align-items:center;padding:0.5rem 0}.month-container .month-list .month .month-button{border-radius:50%;aspect-ratio:1;width:50px;display:flex;justify-content:center;align-items:center}.month-container .month-list .month .month-button:hover{background:var(--comp-month-primary-background);color:var(--comp-month-secondary-font-color);cursor:pointer}.month-container .month-list .month .month-button:active,.month-container .month-list .month .month-button.active{background:var(--comp-month-primary-background);color:var(--comp-month-primary-font-color)}.month-container .today-label{padding:0.5rem 0;color:var(--tct-calendar-day-selected-outline-color, var(--t-calendar-day-selected-outline-color, var(--tct-stoplight-info, var(--const-stoplight-info, #0079c1))))}";
6
6
 
@@ -88,7 +88,7 @@ const r = class {
88
88
  // #region Render Methods
89
89
  render() {
90
90
  return e("slot", {
91
- key: "63a71ae4a0e7d69ea2aaec1244ff89c6d47d6a81",
91
+ key: "e60ef36a762c6af123a91fe6c4def64179663098",
92
92
  onSlotchange: this.handleSlotChange
93
93
  });
94
94
  }
@@ -1 +1 @@
1
- {"version":3,"file":"q2-optgroup.entry.esm.js","sources":["src/components/q2-optgroup/q2-optgroup.scss?tag=q2-optgroup&encapsulation=shadow","src/components/q2-optgroup/q2-optgroup.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: block;\n}\n\n.q2-optgroup-header {\n --comp-header-padding: #{var-list(--tct-scale-1, --app-scale-1x, 5px) var-list(--tct-scale-2, --app-scale-2x, 10px)};\n background: var-list(\n --tct-optgroup-header-background,\n var-prefixer(optgroup-header-bg),\n --t-base,\n #FFFFFF\n );\n color: var-list(--tct-optgroup-header-color, inherit);\n font-size: var(--tct-optgroup-header-font-size, 14px);\n font-weight: var(--tct-optgroup-header-font-weight, 600);\n letter-spacing: var(--tct-optgroup-header-letter-spacing, inherit);\n position: var-list(--tct-optgroup-header-position, sticky);\n padding: var-list(var-prefixer(optgroup-header-padding), --comp-header-padding);\n text-transform: var-list(var-prefixer(optgroup-header-text-transform), none);\n top: calc(var(--comp-popover-top-container-height, 0px) + var-list(var-prefixer(optgroup-top), 0px));\n z-index: 5; // Keeps the optgroup over any hover or focus states\n}\n","import { hasValidAncestor } from '@/utils/component';\nimport { Component, h, ComponentInterface, Prop, Element, Watch, State } from '@stencil/core';\nimport { createGuid, loc } from 'src/utils';\n\n/**\n * @name Option Group\n * @category Forms\n * @summary Use for grouping related options under a label in Select or Dropdown.\n */\n@Component({ tag: 'q2-optgroup', shadow: true, styleUrl: 'q2-optgroup.scss' })\nexport class Q2Optgroup implements ComponentInterface {\n // #region Own Properties\n\n guid: number = createGuid();\n mutationObserver: MutationObserver;\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 hidden: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /** Determines whether all nested options are disabled. */\n @Prop({ reflect: true })\n disabled: boolean = false;\n\n /** Serves as the group header text. */\n @Prop({ reflect: true })\n label: string;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.mutationObserver?.disconnect();\n this.mutationObserver = null;\n }\n\n componentWillLoad() {\n hasValidAncestor(this.hostElement, 'q2-option-list, q2-select, q2-dropdown, q2-pill');\n const observer = new MutationObserver(this.setHidden);\n observer.observe(this.hostElement, { childList: true, attributes: true, subtree: true });\n this.mutationObserver = observer;\n\n // set initially\n this.setHidden();\n this.disabledWatcher(this.disabled);\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('disabled')\n disabledWatcher(disabled: boolean) {\n this.options.forEach(opt => {\n opt.disabledGroup = !!disabled;\n });\n }\n\n // #endregion\n // #region Local Methods\n\n get headerId() {\n return `q2-optgroup-header-${this.guid}`;\n }\n\n get options() {\n return Array.from(this.hostElement.querySelectorAll('q2-option'));\n }\n\n setHidden = () => {\n this.hidden = this.options.every(opt => opt.hidden || opt._multiSelectHidden);\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <div\n class=\"q2-optgroup-container\"\n hidden={this.hidden}\n aria-labelledby={this.headerId}\n role=\"group\"\n >\n <div\n class=\"q2-optgroup-header\"\n id={this.headerId}\n >\n {(this.label && loc(this.label)) || ''}\n </div>\n <div class=\"q2-optgroup-options\">\n <slot />\n </div>\n </div>\n );\n }\n\n // #endregion\n}\n"],"names":[],"mappings":";;;;AAAA,MAAM,aAAa,GAAG,4hDAA4hD;;MCUriD,UAAU,GAAA,MAAA;AADvB,IAAA,WAAA,CAAA,OAAA,EAAA;;;AAII,QAAA,IAAI,CAAA,IAAA,GAAW,UAAU,EAAE;;;AAa3B,QAAA,IAAM,CAAA,MAAA,GAAY,KAAK;;;;AAOvB,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK;AA8CzB,QAAA,IAAS,CAAA,SAAA,GAAG,MAAK;YACb,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,kBAAkB,CAAC;AACjF,SAAC;AA2BJ;;;IAlEG,oBAAoB,GAAA;;QAChB,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,UAAU,EAAE;AACnC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;;IAGhC,iBAAiB,GAAA;AACb,QAAA,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,iDAAiD,CAAC;QACrF,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;QACrD,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxF,QAAA,IAAI,CAAC,gBAAgB,GAAG,QAAQ;;QAGhC,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;;;;AAOvC,IAAA,eAAe,CAAC,QAAiB,EAAA;AAC7B,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAG;AACvB,YAAA,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,QAAQ;AAClC,SAAC,CAAC;;;;AAMN,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,CAAsB,mBAAA,EAAA,IAAI,CAAC,IAAI,EAAE;;AAG5C,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;;;;IAUrE,MAAM,GAAA;QACF,QACI,CACI,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,uBAAuB,EAC7B,MAAM,EAAE,IAAI,CAAC,MAAM,qBACF,IAAI,CAAC,QAAQ,EAC9B,IAAI,EAAC,OAAO,EAAA,EAEZ,CACI,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,oBAAoB,EAC1B,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAA,EAEhB,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CACpC,EACN,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,qBAAqB,EAAA,EAC5B,CAAQ,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAA,CACN,CACJ;;;;;;;;;;;"}
1
+ {"version":3,"file":"q2-optgroup.entry.esm.js","sources":["src/components/q2-optgroup/q2-optgroup.scss?tag=q2-optgroup&encapsulation=shadow","src/components/q2-optgroup/q2-optgroup.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n@import './variables';\n\n:host {\n display: block;\n}\n\n.q2-optgroup-header {\n --comp-header-padding: #{var-list(--tct-scale-1, --app-scale-1x, 5px) var-list(--tct-scale-2, --app-scale-2x, 10px)};\n background: var-list(\n --tct-optgroup-header-background,\n var-prefixer(optgroup-header-bg),\n --t-base,\n #FFFFFF\n );\n color: var-list(--tct-optgroup-header-color, inherit);\n font-size: var(--tct-optgroup-header-font-size, 14px);\n font-weight: var(--tct-optgroup-header-font-weight, 600);\n letter-spacing: var(--tct-optgroup-header-letter-spacing, inherit);\n position: var-list(--tct-optgroup-header-position, sticky);\n padding: var-list(var-prefixer(optgroup-header-padding), --comp-header-padding);\n text-transform: var-list(var-prefixer(optgroup-header-text-transform), none);\n top: calc(var(--comp-popover-top-container-height, 0px) + var-list(var-prefixer(optgroup-top), 0px));\n z-index: 5; // Keeps the optgroup over any hover or focus states\n}\n","import { hasValidAncestor } from '@/utils/component';\nimport { Component, h, ComponentInterface, Prop, Element, Watch, State } from '@stencil/core';\nimport { createGuid, loc } from 'src/utils';\n\n/**\n * @name Option Group\n * @category Forms\n * @summary Use for grouping related options under a label in Select or Dropdown.\n */\n@Component({ tag: 'q2-optgroup', shadow: true, styleUrl: 'q2-optgroup.scss' })\nexport class Q2Optgroup implements ComponentInterface {\n // #region Own Properties\n\n guid: number = createGuid();\n mutationObserver: MutationObserver;\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 hidden: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /** Determines whether all nested options are disabled. */\n @Prop({ reflect: true })\n disabled: boolean = false;\n\n /** Serves as the group header text. */\n @Prop({ reflect: true })\n label: string;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.mutationObserver?.disconnect();\n this.mutationObserver = null;\n }\n\n componentWillLoad() {\n hasValidAncestor(this.hostElement, 'q2-option-list, q2-select, q2-dropdown, q2-pill');\n const observer = new MutationObserver(this.setHidden);\n observer.observe(this.hostElement, { childList: true, attributes: true, subtree: true });\n this.mutationObserver = observer;\n\n // set initially\n this.setHidden();\n this.disabledWatcher(this.disabled);\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('disabled')\n disabledWatcher(disabled: boolean) {\n this.options.forEach(opt => {\n opt.disabledGroup = !!disabled;\n });\n }\n\n // #endregion\n // #region Local Methods\n\n get headerId() {\n return `q2-optgroup-header-${this.guid}`;\n }\n\n get options() {\n return Array.from(this.hostElement.querySelectorAll('q2-option'));\n }\n\n setHidden = () => {\n this.hidden = this.options.every(opt => opt.hidden || opt._multiSelectHidden);\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <div\n class=\"q2-optgroup-container\"\n hidden={this.hidden}\n aria-labelledby={this.headerId}\n role=\"group\"\n >\n <div\n class=\"q2-optgroup-header\"\n id={this.headerId}\n >\n {(this.label && loc(this.label)) || ''}\n </div>\n <div class=\"q2-optgroup-options\">\n <slot />\n </div>\n </div>\n );\n }\n\n // #endregion\n}\n"],"names":[],"mappings":";;;;AAAA,MAAM,aAAa,GAAG,4hDAA4hD;;MCUriD,UAAU,GAAA,MAAA;AADvB,IAAA,WAAA,CAAA,OAAA,EAAA;;;AAII,QAAA,IAAI,CAAA,IAAA,GAAW,UAAU,EAAE;;;AAa3B,QAAA,IAAM,CAAA,MAAA,GAAY,KAAK;;;;AAOvB,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK;AA8CzB,QAAA,IAAS,CAAA,SAAA,GAAG,MAAK;YACb,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,kBAAkB,CAAC;AACjF,SAAC;AA2BJ;;;IAlEG,oBAAoB,GAAA;;QAChB,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,UAAU,EAAE;AACnC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;;IAGhC,iBAAiB,GAAA;AACb,QAAA,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,iDAAiD,CAAC;QACrF,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;QACrD,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxF,QAAA,IAAI,CAAC,gBAAgB,GAAG,QAAQ;;QAGhC,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;;;;AAOvC,IAAA,eAAe,CAAC,QAAiB,EAAA;AAC7B,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAG;AACvB,YAAA,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,QAAQ;AAClC,SAAC,CAAC;;;;AAMN,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,CAAsB,mBAAA,EAAA,IAAI,CAAC,IAAI,EAAE;;AAG5C,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;;;;IAUrE,MAAM,GAAA;QACF,QACI,CACI,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,uBAAuB,EAC7B,MAAM,EAAE,IAAI,CAAC,MAAM,qBACF,IAAI,CAAC,QAAQ,EAC9B,IAAI,EAAC,OAAO,EAAA,EAEZ,CACI,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,oBAAoB,EAC1B,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAA,EAEhB,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CACpC,EACN,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,qBAAqB,EAAA,EAC5B,CAAQ,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAA,CACN,CACJ;;;;;;;;;;;"}