q2-tecton-elements 1.49.2 → 1.50.1

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 (703) hide show
  1. package/dist/cjs/click-elsewhere_2.cjs.entry.js +2 -2
  2. package/dist/cjs/{index-42fcd170.js → index-43010ce4.js} +1 -1
  3. package/dist/cjs/{index-42fcd170.js.map → index-43010ce4.js.map} +1 -1
  4. package/dist/cjs/index-64d8b839.js +1580 -0
  5. package/dist/cjs/index-64d8b839.js.map +1 -0
  6. package/dist/cjs/loader.cjs.js +1 -1
  7. package/dist/cjs/q2-action-sheet.cjs.entry.js +5 -5
  8. package/dist/cjs/q2-action-sheet.cjs.entry.js.map +1 -1
  9. package/dist/cjs/q2-avatar.cjs.entry.js +1 -1
  10. package/dist/cjs/{q2-input.cjs.entry.js → q2-badge_7.cjs.entry.js} +1284 -3
  11. package/dist/cjs/q2-badge_7.cjs.entry.js.map +1 -0
  12. package/dist/cjs/q2-calendar.cjs.entry.js +3 -3
  13. package/dist/cjs/q2-calendar.cjs.entry.js.map +1 -1
  14. package/dist/cjs/q2-card.cjs.entry.js +1 -1
  15. package/dist/cjs/q2-carousel-pane.cjs.entry.js +3 -3
  16. package/dist/cjs/q2-carousel-pane.cjs.entry.js.map +1 -1
  17. package/dist/cjs/q2-carousel.cjs.entry.js +131 -149
  18. package/dist/cjs/q2-carousel.cjs.entry.js.map +1 -1
  19. package/dist/cjs/q2-chart-area.cjs.entry.js +3 -3
  20. package/dist/cjs/q2-chart-area.cjs.entry.js.map +1 -1
  21. package/dist/cjs/q2-chart-bar.cjs.entry.js +3 -3
  22. package/dist/cjs/q2-chart-bar.cjs.entry.js.map +1 -1
  23. package/dist/cjs/q2-chart-donut.cjs.entry.js +2 -2
  24. package/dist/cjs/q2-checkbox-group.cjs.entry.js +2 -2
  25. package/dist/cjs/q2-checkbox.cjs.entry.js +2 -2
  26. package/dist/cjs/q2-currency.cjs.entry.js +1 -1
  27. package/dist/cjs/q2-data-table.cjs.entry.js +62 -2
  28. package/dist/cjs/q2-data-table.cjs.entry.js.map +1 -1
  29. package/dist/cjs/q2-detail.cjs.entry.js +2 -2
  30. package/dist/cjs/q2-dropdown-item.cjs.entry.js +11 -13
  31. package/dist/cjs/q2-dropdown-item.cjs.entry.js.map +1 -1
  32. package/dist/cjs/q2-dropdown.cjs.entry.js +62 -58
  33. package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
  34. package/dist/cjs/q2-editable-field.cjs.entry.js +4 -4
  35. package/dist/cjs/q2-editable-field.cjs.entry.js.map +1 -1
  36. package/dist/cjs/q2-item.cjs.entry.js +3 -3
  37. package/dist/cjs/q2-item.cjs.entry.js.map +1 -1
  38. package/dist/cjs/q2-legend.cjs.entry.js +2 -2
  39. package/dist/cjs/q2-legend.cjs.entry.js.map +1 -1
  40. package/dist/cjs/q2-list.cjs.entry.js +2 -2
  41. package/dist/cjs/q2-loc.cjs.entry.js +2 -2
  42. package/dist/cjs/q2-message.cjs.entry.js +2 -2
  43. package/dist/cjs/q2-month-picker.cjs.entry.js +3 -3
  44. package/dist/cjs/q2-optgroup.cjs.entry.js +2 -2
  45. package/dist/cjs/q2-option-list.cjs.entry.js +13 -11
  46. package/dist/cjs/q2-option-list.cjs.entry.js.map +1 -1
  47. package/dist/cjs/q2-option.cjs.entry.js +1 -1
  48. package/dist/cjs/q2-pagination.cjs.entry.js +3 -3
  49. package/dist/cjs/q2-pill.cjs.entry.js +95 -36
  50. package/dist/cjs/q2-pill.cjs.entry.js.map +1 -1
  51. package/dist/cjs/q2-radio-group.cjs.entry.js +2 -2
  52. package/dist/cjs/q2-radio.cjs.entry.js +2 -2
  53. package/dist/cjs/q2-relative-time.cjs.entry.js +3 -3
  54. package/dist/cjs/q2-section.cjs.entry.js +4 -4
  55. package/dist/cjs/q2-section.cjs.entry.js.map +1 -1
  56. package/dist/cjs/q2-select.cjs.entry.js +19 -18
  57. package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
  58. package/dist/cjs/q2-stepper-pane.cjs.entry.js +2 -2
  59. package/dist/cjs/q2-stepper-vertical.cjs.entry.js +2 -2
  60. package/dist/cjs/q2-stepper.cjs.entry.js +2 -2
  61. package/dist/cjs/q2-tag.cjs.entry.js +33 -6
  62. package/dist/cjs/q2-tag.cjs.entry.js.map +1 -1
  63. package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
  64. package/dist/cjs/q2-textarea.cjs.entry.js +2 -2
  65. package/dist/cjs/q2-tooltip.cjs.entry.js +1 -1
  66. package/dist/cjs/tecton-tab-pane.cjs.entry.js +2 -2
  67. package/dist/collection/collection-manifest.json +7 -8
  68. package/dist/collection/components/click-elsewhere/click-elsewhere.js.map +1 -1
  69. package/dist/{test/elements → collection/components/click-elsewhere/test}/click-elsewhere-test.e2e.js +1 -1
  70. package/dist/collection/components/click-elsewhere/test/click-elsewhere-test.e2e.js.map +1 -0
  71. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js +5 -5
  72. package/dist/collection/components/q2-action-sheet/q2-action-sheet.js.map +1 -1
  73. package/dist/{test/elements → collection/components/q2-action-sheet/test}/q2-action-sheet-test.e2e.js +29 -1
  74. package/dist/collection/components/q2-action-sheet/test/q2-action-sheet-test.e2e.js.map +1 -0
  75. package/dist/collection/components/q2-avatar/q2-avatar.js +1 -1
  76. package/dist/collection/components/q2-avatar/q2-avatar.js.map +1 -1
  77. package/dist/{test/elements → collection/components/q2-avatar/test}/q2-avatar-test.e2e.js +1 -1
  78. package/dist/collection/components/q2-avatar/test/q2-avatar-test.e2e.js.map +1 -0
  79. package/dist/collection/components/q2-badge/q2-badge.js +0 -1
  80. package/dist/collection/components/q2-badge/q2-badge.js.map +1 -1
  81. package/dist/{test/elements → collection/components/q2-badge/test}/q2-badge-test.e2e.js +1 -1
  82. package/dist/collection/components/q2-badge/test/q2-badge-test.e2e.js.map +1 -0
  83. package/dist/collection/components/q2-btn/q2-btn.css +1 -0
  84. package/dist/collection/components/q2-btn/q2-btn.js +3 -15
  85. package/dist/collection/components/q2-btn/q2-btn.js.map +1 -1
  86. package/dist/{test/elements → collection/components/q2-btn/test}/q2-btn-test.e2e.js +36 -1
  87. package/dist/collection/components/q2-btn/test/q2-btn-test.e2e.js.map +1 -0
  88. package/dist/collection/components/q2-calendar/q2-calendar-helpers.js.map +1 -1
  89. package/dist/collection/components/q2-calendar/q2-calendar-types.js.map +1 -1
  90. package/dist/collection/components/q2-calendar/q2-calendar-validation.js.map +1 -1
  91. package/dist/collection/components/q2-calendar/q2-calendar.js +1 -1
  92. package/dist/collection/components/q2-calendar/q2-calendar.js.map +1 -1
  93. package/dist/collection/components/q2-calendar/q2-month-picker.js +2 -2
  94. package/dist/collection/components/q2-calendar/q2-month-picker.js.map +1 -1
  95. package/dist/{test/elements/q2-calendar → collection/components/q2-calendar/test}/helpers-test.e2e.js +2 -2
  96. package/dist/collection/components/q2-calendar/test/helpers-test.e2e.js.map +1 -0
  97. package/dist/{test/elements → collection/components/q2-calendar/test}/q2-calendar-month-picker-test.e2e.js +1 -1
  98. package/dist/collection/components/q2-calendar/test/q2-calendar-month-picker-test.e2e.js.map +1 -0
  99. package/dist/{test/elements → collection/components/q2-calendar/test}/q2-calendar-test.e2e.js +3 -3
  100. package/dist/collection/components/q2-calendar/test/q2-calendar-test.e2e.js.map +1 -0
  101. package/dist/{test/elements/q2-calendar → collection/components/q2-calendar/test}/validation-test.e2e.js +2 -2
  102. package/dist/collection/components/q2-calendar/test/validation-test.e2e.js.map +1 -0
  103. package/dist/collection/components/q2-card/q2-card.js.map +1 -1
  104. package/dist/{test/elements → collection/components/q2-card/test}/q2-card-test.e2e.js +1 -1
  105. package/dist/collection/components/q2-card/test/q2-card-test.e2e.js.map +1 -0
  106. package/dist/collection/components/q2-carousel/q2-carousel.js +190 -164
  107. package/dist/collection/components/q2-carousel/q2-carousel.js.map +1 -1
  108. package/dist/{test/elements → collection/components/q2-carousel/test}/q2-carousel-test.e2e.js +175 -188
  109. package/dist/collection/components/q2-carousel/test/q2-carousel-test.e2e.js.map +1 -0
  110. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js +5 -5
  111. package/dist/collection/components/q2-carousel-pane/q2-carousel-pane.js.map +1 -1
  112. package/dist/{test/elements → collection/components/q2-carousel-pane/test}/q2-carousel-pane-test.e2e.js +1 -1
  113. package/dist/collection/components/q2-carousel-pane/test/q2-carousel-pane-test.e2e.js.map +1 -0
  114. package/dist/{test/elements → collection/components/q2-carousel-pane/test}/q2-carousel-pane-test.spec.js +1 -1
  115. package/dist/collection/components/q2-carousel-pane/test/q2-carousel-pane-test.spec.js.map +1 -0
  116. package/dist/collection/components/q2-chart-area/q2-chart-area.js +20 -20
  117. package/dist/collection/components/q2-chart-area/q2-chart-area.js.map +1 -1
  118. package/dist/{test/elements → collection/components/q2-chart-area/test}/q2-chart-area-test.e2e.js +1 -1
  119. package/dist/collection/components/q2-chart-area/test/q2-chart-area-test.e2e.js.map +1 -0
  120. package/dist/collection/components/q2-chart-bar/q2-chart-bar.js +20 -20
  121. package/dist/collection/components/q2-chart-bar/q2-chart-bar.js.map +1 -1
  122. package/dist/{test/elements → collection/components/q2-chart-bar/test}/q2-chart-bar-test.e2e.js +1 -1
  123. package/dist/collection/components/q2-chart-bar/test/q2-chart-bar-test.e2e.js.map +1 -0
  124. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js +1 -1
  125. package/dist/collection/components/q2-chart-donut/q2-chart-donut.js.map +1 -1
  126. package/dist/{test/elements → collection/components/q2-chart-donut/test}/q2-chart-donut-test.e2e.js +1 -1
  127. package/dist/collection/components/q2-chart-donut/test/q2-chart-donut-test.e2e.js.map +1 -0
  128. package/dist/collection/components/q2-checkbox/q2-checkbox.js +1 -1
  129. package/dist/collection/components/q2-checkbox/q2-checkbox.js.map +1 -1
  130. package/dist/{test/elements → collection/components/q2-checkbox/test}/q2-checkbox-test.e2e.js +1 -1
  131. package/dist/collection/components/q2-checkbox/test/q2-checkbox-test.e2e.js.map +1 -0
  132. package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.js +1 -1
  133. package/dist/collection/components/q2-checkbox-group/q2-checkbox-group.js.map +1 -1
  134. package/dist/{test/elements → collection/components/q2-checkbox-group/test}/q2-checkbox-group-test.e2e.js +1 -1
  135. package/dist/collection/components/q2-checkbox-group/test/q2-checkbox-group-test.e2e.js.map +1 -0
  136. package/dist/collection/components/q2-currency/q2-currency.js +1 -1
  137. package/dist/collection/components/q2-currency/q2-currency.js.map +1 -1
  138. package/dist/{test/elements → collection/components/q2-currency/test}/q2-currency-test.e2e.js +2 -2
  139. package/dist/collection/components/q2-currency/test/q2-currency-test.e2e.js.map +1 -0
  140. package/dist/collection/components/q2-data-table/q2-data-table.js +240 -7
  141. package/dist/collection/components/q2-data-table/q2-data-table.js.map +1 -1
  142. package/dist/{test/elements → collection/components/q2-data-table/test}/q2-data-table-test.e2e.js +64 -2
  143. package/dist/collection/components/q2-data-table/test/q2-data-table-test.e2e.js.map +1 -0
  144. package/dist/collection/components/q2-detail/q2-detail.js +1 -1
  145. package/dist/collection/components/q2-detail/q2-detail.js.map +1 -1
  146. package/dist/{test/elements/q2-detail → collection/components/q2-detail/test}/q2-detail-test.e2e.js +3 -3
  147. package/dist/collection/components/q2-detail/test/q2-detail-test.e2e.js.map +1 -0
  148. package/dist/collection/components/q2-dropdown/q2-dropdown.js +65 -57
  149. package/dist/collection/components/q2-dropdown/q2-dropdown.js.map +1 -1
  150. package/dist/{test/elements → collection/components/q2-dropdown/test}/q2-dropdown-test.e2e.js +165 -120
  151. package/dist/collection/components/q2-dropdown/test/q2-dropdown-test.e2e.js.map +1 -0
  152. package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.js +10 -12
  153. package/dist/collection/components/q2-dropdown-item/q2-dropdown-item.js.map +1 -1
  154. package/dist/{test/elements → collection/components/q2-dropdown-item/test}/q2-dropdown-item-test.e2e.js +5 -13
  155. package/dist/collection/components/q2-dropdown-item/test/q2-dropdown-item-test.e2e.js.map +1 -0
  156. package/dist/collection/components/q2-editable-field/q2-editable-field.js +3 -3
  157. package/dist/collection/components/q2-editable-field/q2-editable-field.js.map +1 -1
  158. package/dist/{test/elements → collection/components/q2-editable-field/test}/q2-editable-field-test.e2e.js +1 -4
  159. package/dist/collection/components/q2-editable-field/test/q2-editable-field-test.e2e.js.map +1 -0
  160. package/dist/collection/components/q2-icon/q2-icon-types.js.map +1 -1
  161. package/dist/collection/components/q2-icon/q2-icon.js.map +1 -1
  162. package/dist/{test/elements → collection/components/q2-icon/test}/q2-icon-test.e2e.js +2 -2
  163. package/dist/collection/components/q2-icon/test/q2-icon-test.e2e.js.map +1 -0
  164. package/dist/collection/components/q2-input/formatting/alpha.js.map +1 -1
  165. package/dist/collection/components/q2-input/formatting/alphanumeric.js.map +1 -1
  166. package/dist/collection/components/q2-input/formatting/credit-card.js.map +1 -1
  167. package/dist/collection/components/q2-input/formatting/credit-card.spec.js.map +1 -1
  168. package/dist/collection/components/q2-input/formatting/currency.js.map +1 -1
  169. package/dist/collection/components/q2-input/formatting/date.js.map +1 -1
  170. package/dist/collection/components/q2-input/formatting/generic.js.map +1 -1
  171. package/dist/collection/components/q2-input/formatting/number.js.map +1 -1
  172. package/dist/collection/components/q2-input/formatting/numeric.js.map +1 -1
  173. package/dist/collection/components/q2-input/formatting/phone.js.map +1 -1
  174. package/dist/collection/components/q2-input/formatting/postal.js.map +1 -1
  175. package/dist/collection/components/q2-input/formatting/ssn.js.map +1 -1
  176. package/dist/collection/components/q2-input/formatting/tin.js.map +1 -1
  177. package/dist/collection/components/q2-input/q2-input-types.js.map +1 -1
  178. package/dist/collection/components/q2-input/q2-input.js +2 -2
  179. package/dist/collection/components/q2-input/q2-input.js.map +1 -1
  180. package/dist/{test/elements → collection/components/q2-input/test}/q2-input-credit-card-test.e2e.js +1 -1
  181. package/dist/collection/components/q2-input/test/q2-input-credit-card-test.e2e.js.map +1 -0
  182. package/dist/{test/elements → collection/components/q2-input/test}/q2-input-test.e2e.js +1 -1
  183. package/dist/collection/components/q2-input/test/q2-input-test.e2e.js.map +1 -0
  184. package/dist/collection/components/q2-item/q2-item.css +3 -3
  185. package/dist/collection/components/q2-item/q2-item.js +1 -1
  186. package/dist/collection/components/q2-item/q2-item.js.map +1 -1
  187. package/dist/{test/elements → collection/components/q2-item/test}/q2-item-test.e2e.js +1 -1
  188. package/dist/collection/components/q2-item/test/q2-item-test.e2e.js.map +1 -0
  189. package/dist/{test/elements → collection/components/q2-item/test}/q2-item-test.spec.js +1 -1
  190. package/dist/collection/components/q2-item/test/q2-item-test.spec.js.map +1 -0
  191. package/dist/collection/components/q2-legend/q2-legend.css +6 -6
  192. package/dist/collection/components/q2-legend/q2-legend.js +1 -1
  193. package/dist/collection/components/q2-legend/q2-legend.js.map +1 -1
  194. package/dist/{test/elements → collection/components/q2-legend/test}/q2-legend-test.e2e.js +1 -1
  195. package/dist/collection/components/q2-legend/test/q2-legend-test.e2e.js.map +1 -0
  196. package/dist/{test/elements → collection/components/q2-legend/test}/q2-legend-test.spec.js +1 -1
  197. package/dist/collection/components/q2-legend/test/q2-legend-test.spec.js.map +1 -0
  198. package/dist/collection/components/q2-list/q2-list.js +1 -1
  199. package/dist/collection/components/q2-list/q2-list.js.map +1 -1
  200. package/dist/{test/elements/q2-detail → collection/components/q2-list/test}/q2-list-test.e2e.js +1 -1
  201. package/dist/collection/components/q2-list/test/q2-list-test.e2e.js.map +1 -0
  202. package/dist/collection/components/q2-loading/q2-loading.js.map +1 -1
  203. package/dist/collection/components/q2-loading/skeleton/q2-loading-element/index.js.map +1 -1
  204. package/dist/collection/components/q2-loading/skeleton/shapes.js.map +1 -1
  205. package/dist/{test/elements → collection/components/q2-loading/test}/q2-loading-element-test.e2e.js +1 -1
  206. package/dist/collection/components/q2-loading/test/q2-loading-element-test.e2e.js.map +1 -0
  207. package/dist/{test/elements → collection/components/q2-loading/test}/q2-loading-test.e2e.js +1 -1
  208. package/dist/collection/components/q2-loading/test/q2-loading-test.e2e.js.map +1 -0
  209. package/dist/collection/components/q2-loc/q2-loc.js +1 -1
  210. package/dist/collection/components/q2-loc/q2-loc.js.map +1 -1
  211. package/dist/{test/elements → collection/components/q2-loc/test}/q2-loc-test.e2e.js +1 -1
  212. package/dist/collection/components/q2-loc/test/q2-loc-test.e2e.js.map +1 -0
  213. package/dist/collection/components/q2-message/q2-message.js +1 -1
  214. package/dist/collection/components/q2-message/q2-message.js.map +1 -1
  215. package/dist/{test/elements → collection/components/q2-message/test}/q2-message-test.e2e.js +1 -1
  216. package/dist/collection/components/q2-message/test/q2-message-test.e2e.js.map +1 -0
  217. package/dist/collection/components/q2-optgroup/q2-optgroup.js +1 -1
  218. package/dist/collection/components/q2-optgroup/q2-optgroup.js.map +1 -1
  219. package/dist/{test/elements → collection/components/q2-optgroup/test}/q2-optgroup-test.e2e.js +1 -1
  220. package/dist/collection/components/q2-optgroup/test/q2-optgroup-test.e2e.js.map +1 -0
  221. package/dist/collection/components/q2-option/q2-option.js +1 -1
  222. package/dist/collection/components/q2-option/q2-option.js.map +1 -1
  223. package/dist/{test/elements → collection/components/q2-option/test}/q2-option-test.e2e.js +1 -1
  224. package/dist/collection/components/q2-option/test/q2-option-test.e2e.js.map +1 -0
  225. package/dist/collection/components/q2-option-list/q2-option-list.js +15 -13
  226. package/dist/collection/components/q2-option-list/q2-option-list.js.map +1 -1
  227. package/dist/{test/elements → collection/components/q2-option-list/test}/q2-option-list-test.e2e.js +1 -1
  228. package/dist/collection/components/q2-option-list/test/q2-option-list-test.e2e.js.map +1 -0
  229. package/dist/collection/components/q2-pagination/q2-pagination.js +2 -2
  230. package/dist/collection/components/q2-pagination/q2-pagination.js.map +1 -1
  231. package/dist/{test/elements → collection/components/q2-pagination/test}/q2-pagination-test.e2e.js +1 -1
  232. package/dist/collection/components/q2-pagination/test/q2-pagination-test.e2e.js.map +1 -0
  233. package/dist/collection/components/q2-pill/q2-pill.js +172 -37
  234. package/dist/collection/components/q2-pill/q2-pill.js.map +1 -1
  235. package/dist/{test/elements → collection/components/q2-pill/test}/q2-pill-test.e2e.js +484 -392
  236. package/dist/collection/components/q2-pill/test/q2-pill-test.e2e.js.map +1 -0
  237. package/dist/collection/components/q2-popover/q2-popover.js +1 -1
  238. package/dist/collection/components/q2-popover/q2-popover.js.map +1 -1
  239. package/dist/{test/elements → collection/components/q2-popover/test}/q2-popover-test.e2e.js +2 -2
  240. package/dist/collection/components/q2-popover/test/q2-popover-test.e2e.js.map +1 -0
  241. package/dist/{test/elements → collection/components/q2-popover/test}/q2-popover-test.spec.js +1 -1
  242. package/dist/collection/components/q2-popover/test/q2-popover-test.spec.js.map +1 -0
  243. package/dist/collection/components/q2-radio/q2-radio.js +1 -1
  244. package/dist/collection/components/q2-radio/q2-radio.js.map +1 -1
  245. package/dist/{test/elements → collection/components/q2-radio/test}/q2-radio-test.e2e.js +1 -1
  246. package/dist/collection/components/q2-radio/test/q2-radio-test.e2e.js.map +1 -0
  247. package/dist/collection/components/q2-radio-group/q2-radio-group.js +1 -1
  248. package/dist/collection/components/q2-radio-group/q2-radio-group.js.map +1 -1
  249. package/dist/{test/elements → collection/components/q2-radio-group/test}/q2-radio-group-test.e2e.js +1 -1
  250. package/dist/collection/components/q2-radio-group/test/q2-radio-group-test.e2e.js.map +1 -0
  251. package/dist/collection/components/q2-relative-time/q2-relative-time.js +1 -1
  252. package/dist/collection/components/q2-relative-time/q2-relative-time.js.map +1 -1
  253. package/dist/{test/elements → collection/components/q2-relative-time/test}/q2-relative-time-test.e2e.js +2 -2
  254. package/dist/collection/components/q2-relative-time/test/q2-relative-time-test.e2e.js.map +1 -0
  255. package/dist/collection/components/q2-section/q2-section.css +1 -1
  256. package/dist/collection/components/q2-section/q2-section.js +2 -2
  257. package/dist/collection/components/q2-section/q2-section.js.map +1 -1
  258. package/dist/{test/elements → collection/components/q2-section/test}/q2-section-test.e2e.js +12 -7
  259. package/dist/collection/components/q2-section/test/q2-section-test.e2e.js.map +1 -0
  260. package/dist/collection/components/q2-select/q2-select.js +18 -17
  261. package/dist/collection/components/q2-select/q2-select.js.map +1 -1
  262. package/dist/{test/elements → collection/components/q2-select/test}/q2-select-test.e2e.js +20 -2
  263. package/dist/collection/components/q2-select/test/q2-select-test.e2e.js.map +1 -0
  264. package/dist/collection/components/q2-stepper/q2-stepper.js +1 -1
  265. package/dist/collection/components/q2-stepper/q2-stepper.js.map +1 -1
  266. package/dist/{test/elements → collection/components/q2-stepper/test}/q2-stepper-test.e2e.js +1 -1
  267. package/dist/collection/components/q2-stepper/test/q2-stepper-test.e2e.js.map +1 -0
  268. package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js +3 -3
  269. package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js.map +1 -1
  270. package/dist/{test/elements → collection/components/q2-stepper-pane/test}/q2-stepper-pane-test.e2e.js +1 -1
  271. package/dist/collection/components/q2-stepper-pane/test/q2-stepper-pane-test.e2e.js.map +1 -0
  272. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js +1 -1
  273. package/dist/collection/components/q2-stepper-vertical/q2-stepper-vertical.js.map +1 -1
  274. package/dist/{test/elements → collection/components/q2-stepper-vertical/test}/q2-stepper-vertical-test.e2e.js +1 -1
  275. package/dist/collection/components/q2-stepper-vertical/test/q2-stepper-vertical-test.e2e.js.map +1 -0
  276. package/dist/collection/components/q2-tab-container/q2-tab-container.js +21 -20
  277. package/dist/collection/components/q2-tab-container/q2-tab-container.js.map +1 -1
  278. package/dist/{test/elements → collection/components/q2-tab-container/test}/q2-tab-container-test.e2e.js +1 -1
  279. package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.e2e.js.map +1 -0
  280. package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.spec.js +54 -0
  281. package/dist/collection/components/q2-tab-container/test/q2-tab-container-test.spec.js.map +1 -0
  282. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js +1 -1
  283. package/dist/collection/components/q2-tab-pane/q2-tab-pane.js.map +1 -1
  284. package/dist/{test/elements → collection/components/q2-tab-pane/test}/q2-tab-pane-test.e2e.js +1 -1
  285. package/dist/collection/components/q2-tab-pane/test/q2-tab-pane-test.e2e.js.map +1 -0
  286. package/dist/collection/components/q2-tag/q2-tag.js +92 -6
  287. package/dist/collection/components/q2-tag/q2-tag.js.map +1 -1
  288. package/dist/{test/elements → collection/components/q2-tag/test}/q2-tag-test.e2e.js +40 -8
  289. package/dist/collection/components/q2-tag/test/q2-tag-test.e2e.js.map +1 -0
  290. package/dist/collection/components/q2-textarea/q2-textarea.js +1 -1
  291. package/dist/collection/components/q2-textarea/q2-textarea.js.map +1 -1
  292. package/dist/{test/elements → collection/components/q2-textarea/test}/q2-textarea-test.e2e.js +1 -1
  293. package/dist/collection/components/q2-textarea/test/q2-textarea-test.e2e.js.map +1 -0
  294. package/dist/collection/components/q2-tooltip/q2-tooltip.js.map +1 -1
  295. package/dist/{test/elements → collection/components/q2-tooltip/test}/q2-tooltip-test.e2e.js +1 -1
  296. package/dist/collection/components/q2-tooltip/test/q2-tooltip-test.e2e.js.map +1 -0
  297. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane-types.js.map +1 -1
  298. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js +2 -2
  299. package/dist/collection/components/tecton-tab-pane/tecton-tab-pane.js.map +1 -1
  300. package/dist/{test/elements → collection/components/tecton-tab-pane/test}/tecton-tab-pane-test.e2e.js +1 -1
  301. package/dist/collection/components/tecton-tab-pane/test/tecton-tab-pane-test.e2e.js.map +1 -0
  302. package/dist/collection/index.js.map +1 -1
  303. package/dist/collection/utils/action-sheet.js.map +1 -1
  304. package/dist/collection/utils/charting.js.map +1 -1
  305. package/dist/{test → collection/utils}/helpers.js +1 -1
  306. package/dist/collection/utils/helpers.js.map +1 -0
  307. package/dist/collection/utils/index.js +9 -0
  308. package/dist/collection/utils/index.js.map +1 -1
  309. package/dist/{test/utils → collection/utils/test}/action-sheet-test.e2e.js +1 -1
  310. package/dist/collection/utils/test/action-sheet-test.e2e.js.map +1 -0
  311. package/dist/{test/utils → collection/utils/test}/index.spec.js +1 -1
  312. package/dist/collection/utils/test/index.spec.js.map +1 -0
  313. package/dist/components/action-sheet.js +1 -1
  314. package/dist/components/index.js +0 -2
  315. package/dist/components/index.js.map +1 -1
  316. package/dist/components/index2.js +1355 -1
  317. package/dist/components/index2.js.map +1 -1
  318. package/dist/components/q2-action-sheet.js +5 -5
  319. package/dist/components/q2-action-sheet.js.map +1 -1
  320. package/dist/components/q2-avatar2.js +1 -1
  321. package/dist/components/q2-badge2.js.map +1 -1
  322. package/dist/components/q2-btn2.js +6 -12
  323. package/dist/components/q2-btn2.js.map +1 -1
  324. package/dist/components/q2-calendar.js +1 -1
  325. package/dist/components/q2-calendar.js.map +1 -1
  326. package/dist/components/q2-carousel-pane.js +2 -2
  327. package/dist/components/q2-carousel-pane.js.map +1 -1
  328. package/dist/components/q2-carousel.js +133 -154
  329. package/dist/components/q2-carousel.js.map +1 -1
  330. package/dist/components/q2-chart-area.js +3 -3
  331. package/dist/components/q2-chart-area.js.map +1 -1
  332. package/dist/components/q2-chart-bar.js +4 -4
  333. package/dist/components/q2-chart-bar.js.map +1 -1
  334. package/dist/components/q2-chart-donut.js +1 -1
  335. package/dist/components/q2-checkbox-group.js +1 -1
  336. package/dist/components/q2-checkbox2.js +1 -1
  337. package/dist/components/q2-currency.js +1 -1
  338. package/dist/components/q2-data-table.js +68 -2
  339. package/dist/components/q2-data-table.js.map +1 -1
  340. package/dist/components/q2-detail.js +1 -1
  341. package/dist/components/q2-dropdown-item2.js +10 -12
  342. package/dist/components/q2-dropdown-item2.js.map +1 -1
  343. package/dist/components/q2-dropdown.js +61 -57
  344. package/dist/components/q2-dropdown.js.map +1 -1
  345. package/dist/components/q2-editable-field.js +3 -3
  346. package/dist/components/q2-editable-field.js.map +1 -1
  347. package/dist/components/q2-input2.js +2 -2
  348. package/dist/components/q2-item.js +2 -2
  349. package/dist/components/q2-item.js.map +1 -1
  350. package/dist/components/q2-legend2.js +2 -2
  351. package/dist/components/q2-legend2.js.map +1 -1
  352. package/dist/components/q2-list.js +1 -1
  353. package/dist/components/q2-loc.js +1 -1
  354. package/dist/components/q2-message2.js +2 -2
  355. package/dist/components/q2-month-picker.js +2 -2
  356. package/dist/components/q2-optgroup2.js +1 -1
  357. package/dist/components/q2-option-list2.js +13 -11
  358. package/dist/components/q2-option-list2.js.map +1 -1
  359. package/dist/components/q2-option2.js +1 -1
  360. package/dist/components/q2-pagination.js +2 -2
  361. package/dist/components/q2-pill.js +100 -38
  362. package/dist/components/q2-pill.js.map +1 -1
  363. package/dist/components/q2-popover2.js +2 -2
  364. package/dist/components/q2-radio-group.js +1 -1
  365. package/dist/components/q2-radio.js +1 -1
  366. package/dist/components/q2-relative-time.js +1 -1
  367. package/dist/components/q2-section.js +3 -3
  368. package/dist/components/q2-section.js.map +1 -1
  369. package/dist/components/q2-select2.js +20 -19
  370. package/dist/components/q2-select2.js.map +1 -1
  371. package/dist/components/q2-stepper-pane.js +1 -1
  372. package/dist/components/q2-stepper-vertical.js +1 -1
  373. package/dist/components/q2-stepper.js +1 -1
  374. package/dist/components/q2-tab-container.js +21 -20
  375. package/dist/components/q2-tab-container.js.map +1 -1
  376. package/dist/components/q2-tab-pane.js +1 -1
  377. package/dist/components/q2-tag.js +38 -8
  378. package/dist/components/q2-tag.js.map +1 -1
  379. package/dist/components/q2-textarea.js +2 -2
  380. package/dist/components/tecton-tab-pane.js +2 -2
  381. package/dist/esm/{action-sheet-dd527168.js → action-sheet-e64cb6f7.js} +2 -2
  382. package/dist/esm/{action-sheet-dd527168.js.map → action-sheet-e64cb6f7.js.map} +1 -1
  383. package/dist/esm/click-elsewhere_2.entry.js +2 -2
  384. package/dist/esm/index-4a80972c.js +1556 -0
  385. package/dist/esm/index-4a80972c.js.map +1 -0
  386. package/dist/esm/{index-1c019b24.js → index-c6d74f10.js} +1 -1
  387. package/dist/esm/{index-1c019b24.js.map → index-c6d74f10.js.map} +1 -1
  388. package/dist/esm/loader.js +1 -1
  389. package/dist/esm/q2-action-sheet.entry.js +5 -5
  390. package/dist/esm/q2-action-sheet.entry.js.map +1 -1
  391. package/dist/esm/q2-avatar.entry.js +1 -1
  392. package/dist/esm/{q2-input.entry.js → q2-badge_7.entry.js} +1280 -5
  393. package/dist/esm/q2-badge_7.entry.js.map +1 -0
  394. package/dist/esm/q2-calendar.entry.js +3 -3
  395. package/dist/esm/q2-calendar.entry.js.map +1 -1
  396. package/dist/esm/q2-card.entry.js +1 -1
  397. package/dist/esm/q2-carousel-pane.entry.js +3 -3
  398. package/dist/esm/q2-carousel-pane.entry.js.map +1 -1
  399. package/dist/esm/q2-carousel.entry.js +131 -149
  400. package/dist/esm/q2-carousel.entry.js.map +1 -1
  401. package/dist/esm/q2-chart-area.entry.js +3 -3
  402. package/dist/esm/q2-chart-area.entry.js.map +1 -1
  403. package/dist/esm/q2-chart-bar.entry.js +3 -3
  404. package/dist/esm/q2-chart-bar.entry.js.map +1 -1
  405. package/dist/esm/q2-chart-donut.entry.js +2 -2
  406. package/dist/esm/q2-checkbox-group.entry.js +2 -2
  407. package/dist/esm/q2-checkbox.entry.js +2 -2
  408. package/dist/esm/q2-currency.entry.js +1 -1
  409. package/dist/esm/q2-data-table.entry.js +62 -2
  410. package/dist/esm/q2-data-table.entry.js.map +1 -1
  411. package/dist/esm/q2-detail.entry.js +2 -2
  412. package/dist/esm/q2-dropdown-item.entry.js +11 -13
  413. package/dist/esm/q2-dropdown-item.entry.js.map +1 -1
  414. package/dist/esm/q2-dropdown.entry.js +62 -58
  415. package/dist/esm/q2-dropdown.entry.js.map +1 -1
  416. package/dist/esm/q2-editable-field.entry.js +4 -4
  417. package/dist/esm/q2-editable-field.entry.js.map +1 -1
  418. package/dist/esm/q2-item.entry.js +3 -3
  419. package/dist/esm/q2-item.entry.js.map +1 -1
  420. package/dist/esm/q2-legend.entry.js +2 -2
  421. package/dist/esm/q2-legend.entry.js.map +1 -1
  422. package/dist/esm/q2-list.entry.js +2 -2
  423. package/dist/esm/q2-loc.entry.js +2 -2
  424. package/dist/esm/q2-message.entry.js +2 -2
  425. package/dist/esm/q2-month-picker.entry.js +3 -3
  426. package/dist/esm/q2-optgroup.entry.js +2 -2
  427. package/dist/esm/q2-option-list.entry.js +13 -11
  428. package/dist/esm/q2-option-list.entry.js.map +1 -1
  429. package/dist/esm/q2-option.entry.js +1 -1
  430. package/dist/esm/q2-pagination.entry.js +3 -3
  431. package/dist/esm/q2-pill.entry.js +96 -37
  432. package/dist/esm/q2-pill.entry.js.map +1 -1
  433. package/dist/esm/q2-radio-group.entry.js +2 -2
  434. package/dist/esm/q2-radio.entry.js +2 -2
  435. package/dist/esm/q2-relative-time.entry.js +3 -3
  436. package/dist/esm/q2-section.entry.js +4 -4
  437. package/dist/esm/q2-section.entry.js.map +1 -1
  438. package/dist/esm/q2-select.entry.js +20 -19
  439. package/dist/esm/q2-select.entry.js.map +1 -1
  440. package/dist/esm/q2-stepper-pane.entry.js +2 -2
  441. package/dist/esm/q2-stepper-vertical.entry.js +2 -2
  442. package/dist/esm/q2-stepper.entry.js +2 -2
  443. package/dist/esm/q2-tag.entry.js +34 -7
  444. package/dist/esm/q2-tag.entry.js.map +1 -1
  445. package/dist/esm/q2-tecton-elements.js +1 -1
  446. package/dist/esm/q2-textarea.entry.js +2 -2
  447. package/dist/esm/q2-tooltip.entry.js +1 -1
  448. package/dist/esm/tecton-tab-pane.entry.js +2 -2
  449. package/dist/q2-tecton-elements/{p-da711c59.entry.js → p-072c5877.entry.js} +2 -2
  450. package/dist/q2-tecton-elements/{p-f6358905.entry.js → p-074ae80c.entry.js} +2 -2
  451. package/dist/q2-tecton-elements/p-0a1dff75.entry.js +2 -0
  452. package/dist/q2-tecton-elements/p-0a1dff75.entry.js.map +1 -0
  453. package/dist/q2-tecton-elements/{p-93680d12.entry.js → p-0a3a804a.entry.js} +2 -2
  454. package/dist/q2-tecton-elements/{p-93680d12.entry.js.map → p-0a3a804a.entry.js.map} +1 -1
  455. package/dist/q2-tecton-elements/p-259b728a.entry.js +2 -0
  456. package/dist/q2-tecton-elements/{p-77a763eb.entry.js.map → p-259b728a.entry.js.map} +1 -1
  457. package/dist/q2-tecton-elements/{p-7b9a6bb7.entry.js → p-2c26295e.entry.js} +2 -2
  458. package/dist/q2-tecton-elements/{p-bbf9d36d.entry.js → p-2ca6d44f.entry.js} +2 -2
  459. package/dist/q2-tecton-elements/{p-2bcb7e89.entry.js → p-2fcaf2d6.entry.js} +2 -2
  460. package/dist/q2-tecton-elements/p-2fcaf2d6.entry.js.map +1 -0
  461. package/dist/q2-tecton-elements/{p-0852e6fe.entry.js → p-34696e3f.entry.js} +2 -2
  462. package/dist/q2-tecton-elements/{p-1e7fa870.entry.js → p-34856c71.entry.js} +2 -2
  463. package/dist/q2-tecton-elements/p-34856c71.entry.js.map +1 -0
  464. package/dist/q2-tecton-elements/p-376a0589.entry.js +2 -0
  465. package/dist/q2-tecton-elements/p-376a0589.entry.js.map +1 -0
  466. package/dist/q2-tecton-elements/{p-630613c7.entry.js → p-395904b4.entry.js} +2 -2
  467. package/dist/q2-tecton-elements/p-3b0d3cd4.entry.js +2 -0
  468. package/dist/q2-tecton-elements/p-3b0d3cd4.entry.js.map +1 -0
  469. package/dist/q2-tecton-elements/{p-d8d9ba1f.entry.js → p-3c7be0bb.entry.js} +2 -2
  470. package/dist/q2-tecton-elements/p-3c7be0bb.entry.js.map +1 -0
  471. package/dist/q2-tecton-elements/p-403bf3d4.entry.js +2 -0
  472. package/dist/q2-tecton-elements/{p-5037fa67.entry.js.map → p-403bf3d4.entry.js.map} +1 -1
  473. package/dist/q2-tecton-elements/{p-db79c056.entry.js → p-4116579f.entry.js} +2 -2
  474. package/dist/q2-tecton-elements/{p-e0a6baea.entry.js → p-45407ecc.entry.js} +2 -2
  475. package/dist/q2-tecton-elements/{p-ec8a0b64.entry.js → p-58cafc0d.entry.js} +2 -2
  476. package/dist/q2-tecton-elements/{p-4388e521.entry.js → p-5d936af5.entry.js} +2 -2
  477. package/dist/q2-tecton-elements/p-6237c775.entry.js +2 -0
  478. package/dist/q2-tecton-elements/p-6237c775.entry.js.map +1 -0
  479. package/dist/q2-tecton-elements/{p-a177d812.entry.js → p-661ed976.entry.js} +2 -2
  480. package/dist/q2-tecton-elements/{p-da0cacef.entry.js → p-6b7c53a8.entry.js} +2 -2
  481. package/dist/q2-tecton-elements/{p-6c933b14.entry.js → p-6e6d9793.entry.js} +2 -2
  482. package/dist/q2-tecton-elements/{p-be518818.js → p-721365be.js} +1 -1
  483. package/dist/q2-tecton-elements/{p-a8e7e591.entry.js → p-77272c4c.entry.js} +2 -2
  484. package/dist/q2-tecton-elements/{p-793a453e.entry.js → p-77a0cc0c.entry.js} +2 -2
  485. package/dist/q2-tecton-elements/{p-9c589ab3.entry.js → p-8111547c.entry.js} +2 -2
  486. package/dist/q2-tecton-elements/{p-05b30f98.entry.js → p-8a4b106d.entry.js} +2 -2
  487. package/dist/q2-tecton-elements/p-8a4b106d.entry.js.map +1 -0
  488. package/dist/q2-tecton-elements/p-9a1a4bc0.js +3 -0
  489. package/dist/q2-tecton-elements/p-9a1a4bc0.js.map +1 -0
  490. package/dist/q2-tecton-elements/p-a7a0b8aa.entry.js +2 -0
  491. package/dist/q2-tecton-elements/p-a7a0b8aa.entry.js.map +1 -0
  492. package/dist/q2-tecton-elements/p-aa57b657.entry.js +2 -0
  493. package/dist/q2-tecton-elements/p-aa57b657.entry.js.map +1 -0
  494. package/dist/q2-tecton-elements/p-ad998f71.entry.js +2 -0
  495. package/dist/q2-tecton-elements/p-ad998f71.entry.js.map +1 -0
  496. package/dist/q2-tecton-elements/{p-e3ad770b.entry.js → p-adec9275.entry.js} +2 -2
  497. package/dist/q2-tecton-elements/p-adf0a7c9.entry.js +2 -0
  498. package/dist/q2-tecton-elements/p-adf0a7c9.entry.js.map +1 -0
  499. package/dist/q2-tecton-elements/p-b72fd065.entry.js +2 -0
  500. package/dist/q2-tecton-elements/p-b72fd065.entry.js.map +1 -0
  501. package/dist/q2-tecton-elements/{p-780a1d0e.js → p-b7554a79.js} +2 -2
  502. package/dist/q2-tecton-elements/{p-40df4468.entry.js → p-c0c658d1.entry.js} +2 -2
  503. package/dist/q2-tecton-elements/{p-baa2eaa9.entry.js → p-c81d299a.entry.js} +2 -2
  504. package/dist/q2-tecton-elements/p-c81d299a.entry.js.map +1 -0
  505. package/dist/q2-tecton-elements/{p-08176bd0.entry.js → p-cb3f48de.entry.js} +2 -2
  506. package/dist/q2-tecton-elements/{p-2810ba28.entry.js → p-ce4e6b41.entry.js} +2 -2
  507. package/dist/q2-tecton-elements/{p-76b98623.entry.js → p-cf32b5db.entry.js} +2 -2
  508. package/dist/q2-tecton-elements/p-cf966a0f.entry.js +2 -0
  509. package/dist/q2-tecton-elements/p-cf966a0f.entry.js.map +1 -0
  510. package/dist/q2-tecton-elements/{p-c5aac064.entry.js → p-d2e1631a.entry.js} +2 -2
  511. package/dist/q2-tecton-elements/{p-c5aac064.entry.js.map → p-d2e1631a.entry.js.map} +1 -1
  512. package/dist/q2-tecton-elements/{p-2e6669a7.entry.js → p-dc77bf66.entry.js} +2 -2
  513. package/dist/q2-tecton-elements/{p-e4b8f4b3.entry.js → p-fffb54e9.entry.js} +2 -2
  514. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
  515. package/dist/q2-tecton-elements/q2-tecton-elements.esm.js.map +1 -1
  516. package/dist/types/components/q2-action-sheet/q2-action-sheet.d.ts +60 -0
  517. package/dist/types/components/q2-btn/q2-btn.d.ts +1 -2
  518. package/dist/types/components/q2-calendar/q2-calendar.d.ts +323 -0
  519. package/dist/types/components/q2-carousel/q2-carousel.d.ts +36 -25
  520. package/dist/types/components/q2-carousel-pane/q2-carousel-pane.d.ts +3 -3
  521. package/dist/types/components/q2-chart-area/q2-chart-area.d.ts +6 -6
  522. package/dist/types/components/q2-chart-bar/q2-chart-bar.d.ts +14 -14
  523. package/dist/types/components/q2-data-table/q2-data-table.d.ts +259 -0
  524. package/dist/types/components/q2-dropdown/q2-dropdown.d.ts +129 -0
  525. package/dist/types/components/q2-dropdown-item/q2-dropdown-item.d.ts +50 -0
  526. package/dist/types/components/q2-editable-field/q2-editable-field.d.ts +140 -0
  527. package/dist/types/components/q2-loading/skeleton/shapes.d.ts +1 -0
  528. package/dist/types/components/q2-optgroup/q2-optgroup.d.ts +1 -1
  529. package/dist/types/components/q2-option-list/q2-option-list.d.ts +99 -0
  530. package/dist/types/components/q2-pagination/q2-pagination.d.ts +60 -0
  531. package/dist/types/components/q2-pill/q2-pill.d.ts +128 -0
  532. package/dist/types/components/q2-select/q2-select.d.ts +232 -0
  533. package/dist/types/components/q2-stepper/q2-stepper.d.ts +52 -0
  534. package/dist/types/components/q2-stepper-vertical/q2-stepper-vertical.d.ts +62 -0
  535. package/dist/types/components/q2-tab-container/q2-tab-container.d.ts +5 -5
  536. package/dist/types/components/q2-tag/q2-tag.d.ts +63 -0
  537. package/dist/types/components.d.ts +77 -33
  538. package/dist/types/utils/action-sheet.d.ts +12 -0
  539. package/dist/types/{workspace/workspace/tecton-production_release_1.49.x/packages/q2-tecton-elements/.stencil/test → utils}/helpers.d.ts +1 -1
  540. package/dist/types/utils/index.d.ts +1 -0
  541. package/package.json +8 -6
  542. package/dist/cjs/index-a93362ed.js +0 -225
  543. package/dist/cjs/index-a93362ed.js.map +0 -1
  544. package/dist/cjs/q2-badge.cjs.entry.js +0 -52
  545. package/dist/cjs/q2-badge.cjs.entry.js.map +0 -1
  546. package/dist/cjs/q2-btn_2.cjs.entry.js +0 -237
  547. package/dist/cjs/q2-btn_2.cjs.entry.js.map +0 -1
  548. package/dist/cjs/q2-icon.cjs.entry.js +0 -731
  549. package/dist/cjs/q2-icon.cjs.entry.js.map +0 -1
  550. package/dist/cjs/q2-input.cjs.entry.js.map +0 -1
  551. package/dist/cjs/q2-tab-container.cjs.entry.js +0 -263
  552. package/dist/cjs/q2-tab-container.cjs.entry.js.map +0 -1
  553. package/dist/cjs/q2-tab-pane.cjs.entry.js +0 -46
  554. package/dist/cjs/q2-tab-pane.cjs.entry.js.map +0 -1
  555. package/dist/cjs/slot-component.cjs.entry.js +0 -19
  556. package/dist/cjs/slot-component.cjs.entry.js.map +0 -1
  557. package/dist/components/slot-component.d.ts +0 -11
  558. package/dist/components/slot-component.js +0 -34
  559. package/dist/components/slot-component.js.map +0 -1
  560. package/dist/esm/index-3c5cd75e.js +0 -202
  561. package/dist/esm/index-3c5cd75e.js.map +0 -1
  562. package/dist/esm/q2-badge.entry.js +0 -48
  563. package/dist/esm/q2-badge.entry.js.map +0 -1
  564. package/dist/esm/q2-btn_2.entry.js +0 -232
  565. package/dist/esm/q2-btn_2.entry.js.map +0 -1
  566. package/dist/esm/q2-icon.entry.js +0 -727
  567. package/dist/esm/q2-icon.entry.js.map +0 -1
  568. package/dist/esm/q2-input.entry.js.map +0 -1
  569. package/dist/esm/q2-tab-container.entry.js +0 -259
  570. package/dist/esm/q2-tab-container.entry.js.map +0 -1
  571. package/dist/esm/q2-tab-pane.entry.js +0 -42
  572. package/dist/esm/q2-tab-pane.entry.js.map +0 -1
  573. package/dist/esm/slot-component.entry.js +0 -15
  574. package/dist/esm/slot-component.entry.js.map +0 -1
  575. package/dist/q2-tecton-elements/p-05b30f98.entry.js.map +0 -1
  576. package/dist/q2-tecton-elements/p-089a7a1e.entry.js +0 -2
  577. package/dist/q2-tecton-elements/p-089a7a1e.entry.js.map +0 -1
  578. package/dist/q2-tecton-elements/p-1e7fa870.entry.js.map +0 -1
  579. package/dist/q2-tecton-elements/p-25bfe0b2.entry.js +0 -2
  580. package/dist/q2-tecton-elements/p-25bfe0b2.entry.js.map +0 -1
  581. package/dist/q2-tecton-elements/p-2bcb7e89.entry.js.map +0 -1
  582. package/dist/q2-tecton-elements/p-333a41ca.entry.js +0 -2
  583. package/dist/q2-tecton-elements/p-333a41ca.entry.js.map +0 -1
  584. package/dist/q2-tecton-elements/p-4da4cb5d.entry.js +0 -2
  585. package/dist/q2-tecton-elements/p-4da4cb5d.entry.js.map +0 -1
  586. package/dist/q2-tecton-elements/p-5037fa67.entry.js +0 -2
  587. package/dist/q2-tecton-elements/p-550881db.entry.js +0 -2
  588. package/dist/q2-tecton-elements/p-550881db.entry.js.map +0 -1
  589. package/dist/q2-tecton-elements/p-5775b02b.entry.js +0 -2
  590. package/dist/q2-tecton-elements/p-5775b02b.entry.js.map +0 -1
  591. package/dist/q2-tecton-elements/p-77a763eb.entry.js +0 -2
  592. package/dist/q2-tecton-elements/p-84190698.js +0 -2
  593. package/dist/q2-tecton-elements/p-84190698.js.map +0 -1
  594. package/dist/q2-tecton-elements/p-9e90a38a.entry.js +0 -2
  595. package/dist/q2-tecton-elements/p-9e90a38a.entry.js.map +0 -1
  596. package/dist/q2-tecton-elements/p-9ecabc7a.entry.js +0 -2
  597. package/dist/q2-tecton-elements/p-9ecabc7a.entry.js.map +0 -1
  598. package/dist/q2-tecton-elements/p-a657277b.entry.js +0 -2
  599. package/dist/q2-tecton-elements/p-a657277b.entry.js.map +0 -1
  600. package/dist/q2-tecton-elements/p-b3322f94.entry.js +0 -2
  601. package/dist/q2-tecton-elements/p-b3322f94.entry.js.map +0 -1
  602. package/dist/q2-tecton-elements/p-baa2eaa9.entry.js.map +0 -1
  603. package/dist/q2-tecton-elements/p-c8b4f5f7.entry.js +0 -2
  604. package/dist/q2-tecton-elements/p-c8b4f5f7.entry.js.map +0 -1
  605. package/dist/q2-tecton-elements/p-d2d3d95b.entry.js +0 -2
  606. package/dist/q2-tecton-elements/p-d2d3d95b.entry.js.map +0 -1
  607. package/dist/q2-tecton-elements/p-d78669df.entry.js +0 -2
  608. package/dist/q2-tecton-elements/p-d78669df.entry.js.map +0 -1
  609. package/dist/q2-tecton-elements/p-d8d9ba1f.entry.js.map +0 -1
  610. package/dist/q2-tecton-elements/p-dbfab45b.entry.js +0 -2
  611. package/dist/q2-tecton-elements/p-dbfab45b.entry.js.map +0 -1
  612. package/dist/q2-tecton-elements/p-e44560d9.entry.js +0 -2
  613. package/dist/q2-tecton-elements/p-e44560d9.entry.js.map +0 -1
  614. package/dist/q2-tecton-elements/p-ea7876eb.entry.js +0 -2
  615. package/dist/q2-tecton-elements/p-ea7876eb.entry.js.map +0 -1
  616. package/dist/test/elements/click-elsewhere-test.e2e.js.map +0 -1
  617. package/dist/test/elements/q2-action-sheet-test.e2e.js.map +0 -1
  618. package/dist/test/elements/q2-avatar-test.e2e.js.map +0 -1
  619. package/dist/test/elements/q2-badge-test.e2e.js.map +0 -1
  620. package/dist/test/elements/q2-btn-test.e2e.js.map +0 -1
  621. package/dist/test/elements/q2-calendar/helpers-test.e2e.js.map +0 -1
  622. package/dist/test/elements/q2-calendar/validation-test.e2e.js.map +0 -1
  623. package/dist/test/elements/q2-calendar-month-picker-test.e2e.js.map +0 -1
  624. package/dist/test/elements/q2-calendar-test.e2e.js.map +0 -1
  625. package/dist/test/elements/q2-card-test.e2e.js.map +0 -1
  626. package/dist/test/elements/q2-carousel-pane-test.e2e.js.map +0 -1
  627. package/dist/test/elements/q2-carousel-pane-test.spec.js.map +0 -1
  628. package/dist/test/elements/q2-carousel-test.e2e.js.map +0 -1
  629. package/dist/test/elements/q2-chart-area-test.e2e.js.map +0 -1
  630. package/dist/test/elements/q2-chart-bar-test.e2e.js.map +0 -1
  631. package/dist/test/elements/q2-chart-donut-test.e2e.js.map +0 -1
  632. package/dist/test/elements/q2-checkbox-group-test.e2e.js.map +0 -1
  633. package/dist/test/elements/q2-checkbox-test.e2e.js.map +0 -1
  634. package/dist/test/elements/q2-currency-test.e2e.js.map +0 -1
  635. package/dist/test/elements/q2-data-table-test.e2e.js.map +0 -1
  636. package/dist/test/elements/q2-detail/q2-detail-test.e2e.js.map +0 -1
  637. package/dist/test/elements/q2-detail/q2-list-test.e2e.js.map +0 -1
  638. package/dist/test/elements/q2-detail/slot-component.js +0 -32
  639. package/dist/test/elements/q2-detail/slot-component.js.map +0 -1
  640. package/dist/test/elements/q2-dropdown-item-test.e2e.js.map +0 -1
  641. package/dist/test/elements/q2-dropdown-test.e2e.js.map +0 -1
  642. package/dist/test/elements/q2-editable-field-test.e2e.js.map +0 -1
  643. package/dist/test/elements/q2-icon-test.e2e.js.map +0 -1
  644. package/dist/test/elements/q2-input-credit-card-test.e2e.js.map +0 -1
  645. package/dist/test/elements/q2-input-test.e2e.js.map +0 -1
  646. package/dist/test/elements/q2-item-test.e2e.js.map +0 -1
  647. package/dist/test/elements/q2-item-test.spec.js.map +0 -1
  648. package/dist/test/elements/q2-legend-test.e2e.js.map +0 -1
  649. package/dist/test/elements/q2-legend-test.spec.js.map +0 -1
  650. package/dist/test/elements/q2-loading-element-test.e2e.js.map +0 -1
  651. package/dist/test/elements/q2-loading-test.e2e.js.map +0 -1
  652. package/dist/test/elements/q2-loc-test.e2e.js.map +0 -1
  653. package/dist/test/elements/q2-message-test.e2e.js.map +0 -1
  654. package/dist/test/elements/q2-optgroup-test.e2e.js.map +0 -1
  655. package/dist/test/elements/q2-option-list-test.e2e.js.map +0 -1
  656. package/dist/test/elements/q2-option-test.e2e.js.map +0 -1
  657. package/dist/test/elements/q2-pagination-test.e2e.js.map +0 -1
  658. package/dist/test/elements/q2-pill-test.e2e.js.map +0 -1
  659. package/dist/test/elements/q2-popover-test.e2e.js.map +0 -1
  660. package/dist/test/elements/q2-popover-test.spec.js.map +0 -1
  661. package/dist/test/elements/q2-radio-group-test.e2e.js.map +0 -1
  662. package/dist/test/elements/q2-radio-test.e2e.js.map +0 -1
  663. package/dist/test/elements/q2-relative-time-test.e2e.js.map +0 -1
  664. package/dist/test/elements/q2-section-test.e2e.js.map +0 -1
  665. package/dist/test/elements/q2-select-test.e2e.js.map +0 -1
  666. package/dist/test/elements/q2-stepper-pane-test.e2e.js.map +0 -1
  667. package/dist/test/elements/q2-stepper-test.e2e.js.map +0 -1
  668. package/dist/test/elements/q2-stepper-vertical-test.e2e.js.map +0 -1
  669. package/dist/test/elements/q2-tab-container-test.e2e.js.map +0 -1
  670. package/dist/test/elements/q2-tab-pane-test.e2e.js.map +0 -1
  671. package/dist/test/elements/q2-tag-test.e2e.js.map +0 -1
  672. package/dist/test/elements/q2-textarea-test.e2e.js.map +0 -1
  673. package/dist/test/elements/q2-tooltip-test.e2e.js.map +0 -1
  674. package/dist/test/elements/tecton-tab-pane-test.e2e.js.map +0 -1
  675. package/dist/test/helpers.js.map +0 -1
  676. package/dist/test/utils/action-sheet-test.e2e.js.map +0 -1
  677. package/dist/test/utils/index.spec.js.map +0 -1
  678. package/dist/types/workspace/workspace/tecton-production_release_1.49.x/packages/q2-tecton-elements/.stencil/test/elements/q2-detail/slot-component.d.ts +0 -4
  679. /package/dist/q2-tecton-elements/{p-da711c59.entry.js.map → p-072c5877.entry.js.map} +0 -0
  680. /package/dist/q2-tecton-elements/{p-f6358905.entry.js.map → p-074ae80c.entry.js.map} +0 -0
  681. /package/dist/q2-tecton-elements/{p-7b9a6bb7.entry.js.map → p-2c26295e.entry.js.map} +0 -0
  682. /package/dist/q2-tecton-elements/{p-bbf9d36d.entry.js.map → p-2ca6d44f.entry.js.map} +0 -0
  683. /package/dist/q2-tecton-elements/{p-0852e6fe.entry.js.map → p-34696e3f.entry.js.map} +0 -0
  684. /package/dist/q2-tecton-elements/{p-630613c7.entry.js.map → p-395904b4.entry.js.map} +0 -0
  685. /package/dist/q2-tecton-elements/{p-db79c056.entry.js.map → p-4116579f.entry.js.map} +0 -0
  686. /package/dist/q2-tecton-elements/{p-e0a6baea.entry.js.map → p-45407ecc.entry.js.map} +0 -0
  687. /package/dist/q2-tecton-elements/{p-ec8a0b64.entry.js.map → p-58cafc0d.entry.js.map} +0 -0
  688. /package/dist/q2-tecton-elements/{p-4388e521.entry.js.map → p-5d936af5.entry.js.map} +0 -0
  689. /package/dist/q2-tecton-elements/{p-a177d812.entry.js.map → p-661ed976.entry.js.map} +0 -0
  690. /package/dist/q2-tecton-elements/{p-da0cacef.entry.js.map → p-6b7c53a8.entry.js.map} +0 -0
  691. /package/dist/q2-tecton-elements/{p-6c933b14.entry.js.map → p-6e6d9793.entry.js.map} +0 -0
  692. /package/dist/q2-tecton-elements/{p-be518818.js.map → p-721365be.js.map} +0 -0
  693. /package/dist/q2-tecton-elements/{p-a8e7e591.entry.js.map → p-77272c4c.entry.js.map} +0 -0
  694. /package/dist/q2-tecton-elements/{p-793a453e.entry.js.map → p-77a0cc0c.entry.js.map} +0 -0
  695. /package/dist/q2-tecton-elements/{p-9c589ab3.entry.js.map → p-8111547c.entry.js.map} +0 -0
  696. /package/dist/q2-tecton-elements/{p-e3ad770b.entry.js.map → p-adec9275.entry.js.map} +0 -0
  697. /package/dist/q2-tecton-elements/{p-780a1d0e.js.map → p-b7554a79.js.map} +0 -0
  698. /package/dist/q2-tecton-elements/{p-40df4468.entry.js.map → p-c0c658d1.entry.js.map} +0 -0
  699. /package/dist/q2-tecton-elements/{p-08176bd0.entry.js.map → p-cb3f48de.entry.js.map} +0 -0
  700. /package/dist/q2-tecton-elements/{p-2810ba28.entry.js.map → p-ce4e6b41.entry.js.map} +0 -0
  701. /package/dist/q2-tecton-elements/{p-76b98623.entry.js.map → p-cf32b5db.entry.js.map} +0 -0
  702. /package/dist/q2-tecton-elements/{p-2e6669a7.entry.js.map → p-dc77bf66.entry.js.map} +0 -0
  703. /package/dist/q2-tecton-elements/{p-e4b8f4b3.entry.js.map → p-fffb54e9.entry.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["q2BadgeCss","Q2BadgeStyle0","Q2Badge","badgeText","maxValue","Math","pow","this","maxLength","value","isNaN","Number","toLocaleString","hasSlot","hostElement","innerHTML","trim","render","badgeClass","size","push","h","Fragment","class","join","q2BtnCss","Q2BtnStyle0","Q2Btn","handleButtonSize","handleDeprecationWarning","handleIcons","icon","Array","from","querySelectorAll","reduce","acc","element","remove","hasIcon","hasLoc","querySelector","hasText","textContent","hasIconLeft","firstElementChild","hasIconRight","lastElementChild","hasIconOnly","iconPosition","handleSlotChange","renderButton","ariaExpanded","ariaHasPopup","ariaSelected","ariaPressed","description","disabled","type","tabindex","buttonAttributes","loading","badge","label","hideLabel","renderLoadingSpinner","isLoadingSpinnerInline","ref","el","primaryBtn","loc","undefined","role","_role","hidden","modifiers","onSlotchange","id","primaryBtnWrapper","tabIndex","componentWillLoad","handleAriaLabel","handleColor","componentDidLoad","overrideFocus","handleClick","event","stopImmediatePropagation","focus","delegateFocus","isEventFromElement","ariaLabelObserver","sizeObserver","getAriaValueFromProp","ariaLabel","q2IconCss","Q2IconStyle0","Q2Icon","handleIcon","componentDidRender","iconClone","_b","_a","spriteGroup","appendedClone","_c","appendChild","_d","spriteUse","setAttribute","isCustom","setCustomSVGAttrs","fetchSprite","iconCloneViewBox","getAttribute","spriteElement","spriteId","document","spriteEventName","spriteFileName","iconMap","checkForSprite","spriteContainer","getOrCreateSpriteContainer","hasAttribute","cloneSpriteNode","addEventListener","once","createElement","spriteNode","cloneNode","spriteExists","spritePath","getAssetPath","response","fetch","data","text","wrappingDiv","svg","tagName","replaceWith","parentNode","replaceChild","dispatchEvent","CustomEvent","bubbles","spriteContainerId","style","display","body","innerSVG","title","labelId","createGuid","viewBox","xmlns","formatNumber","val","options","prefix","suffix","decimals","decimalSeparator","thousandsSeparator","allowDecimal","allowNegative","explicit","isNegative","parsedValue","replace","toFixed","integerString","decimalString","splitValue","negativeSymbol","formattedValue","fullyFormattedValue","formattingCharacterCount","length","maxlength","MAX_SAFE_INTEGER","toString","unformattedValue","splitIndex","substring","padStart","formatValue","mask","generateMask","minFormattedLength","getMinimumFormattedLength","optionalValidatingChars","isOptionalValidatingChar","character","includes","knownValidatingChars","isKnownValidatingChar","getStaticFormattingChars","knownChars","formattingChars","RegExp","split","Set","isStaticFormattingChar","has","getValidatedChar","char","matcher","toUpperCase","maskArray","currentValueIndex","getNextNonFormattingCharIndex","validChar","currencyFormats","AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHF","CLF","CLP","CNY","COP","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EEK","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LTL","LVL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SKK","SLL","SOS","SRD","STN","SVC","SYP","SZL","THB","TJS","TMM","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VEF","VND","VUV","WST","XAF","XCD","XOF","XPF","YER","ZAR","ZMW","ZWD","formatCurrency","currencyCode","processedCurrencyCode","currencyFormat","Object","assign","phoneNumberFormats","AF","AL","DZ","AD","AO","AI","AG","AR","AM","AQ","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BA","BW","BR","BN","BG","BF","BI","KH","CM","CA","CV","KY","CF","TD","CL","CN","CO","KM","CD","CG","CR","CI","HR","CU","CY","CZ","DK","DJ","DM","DO","TL","EC","EG","SV","GQ","EE","ET","FK","FO","FJ","FI","FR","GF","PF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GN","GW","GY","HK","HN","HT","HU","IS","IN","ID","IR","IQ","IE","IL","IT","JM","JP","JO","KZ","KE","KI","KR","KW","KG","LA","LV","LB","LS","LY","LI","LT","LU","MO","MK","MG","MW","MY","MV","ML","MT","MH","MQ","MU","MX","MD","MC","MN","MS","MA","MZ","MM","NA","NP","NL","AN","NC","NZ","NI","NE","NG","MP","NO","OM","PK","PW","PA","PG","PE","PH","PL","PT","PR","QA","RE","RO","RU","RW","SH","KN","LC","VC","ST","SA","SN","SC","SL","SG","SK","SI","SB","ZA","ES","LK","SD","SR","SZ","SE","CH","SY","TJ","TZ","TH","TG","TT","TN","TR","TM","TC","UG","UA","AE","GB","UY","UZ","VE","VN","VG","VI","YE","ZM","ZW","AC","ME","PS","RS","TW","CW","US","formatPhoneNumber","isoCode","formatSSN","formatTIN","formatAlphanumeric","formatAlpha","modifier","getNumberFormat","formatOptions","numberFormat","formatParts","match","formatNumeric","formatPercentage","postalCodeFormats","AS","CX","CC","GG","GS","IM","JE","XK","LR","YT","FM","NF","PY","PM","PN","WS","SM","SO","SJ","YU","WF","formatPostalCode","dateFormats","formatDate","format","formattedValueObject","detectedType","formatCreditCard","detectCreditCardTypeFromValue","creditCardFormatters","leftIcon","unknownFormatter","unknownFn","valueObject","leftIconMuted","amexFormatter","amexFn","discoverFormatter","discoverFn","masterCardFormatter","masterCardFn","visaFormatter","visaFn","dinersClubInternationalFormatter","dinersClub","discover","amex","masterCard","visa","unknown","firstInt","parseInt","charAt","secondInt","firstfour","substr","thirdInt","firstthree","firstsix","q2InputCss","Q2InputStyle0","inputTypeMap","tel","number","password","search","url","email","currency","phone","ssn","alphanumeric","alpha","numeric","percentage","postal","date","Q2Input","guid","isMobile","scheduledAfterRender","handleCurrencyKeydown","key","inputElement","inputField","textSelectedForDeletion","selectionStart","selectionEnd","handleValueAndCursor","cursorPosition","calculateCursorPositionOnInput","input","emit","clear","setCursorPosition","onClearInput","eventDetail","change","onInputBlur","hasFocus","setMessageHeight","valueOnFocus","onInputClick","shouldCursorStayAtEnd","placeCursorAtEnd","onInputFocus","shouldCursorStartAtEnd","calculateCursorPositionOnFocus","onInputInput","stopPropagation","handleCurrencyDeletion","newFormattedValue","getFormattedValue","target","handleDataInput","validateInput","onInputKeydown","keysThatMoveCursor","preventDefault","onInputPaste","clipboardData","getData","onMutationObserved","checkSlotCount","onRefocusInput","showMessages","onToggleVisibility","FocusEvent","textHidden","validity","inputRef","valid","invalid","disconnectedCallback","manageClearableResizeObserver","mutationObserver","disconnect","stringValue","defineProperty","get","clearable","pseudo","autofocus","observer","MutationObserver","observe","childList","forEach","fn","onHostElementChange","onchange","detail","onHostElementFocus","checkValidity","clearValue","setValue","InputEvent","isSmallThreshold","resizeObserver","ResizeObserver","entry","isSmall","contentRect","width","unobserve","errorsObserver","formatModifierObserver","formatAndUpdateValueFromProp","formattedValueObjectObserver","formatted","hintsObserver","typeObserver","valueObserver","ariaAttributes","ariaOwns","ariaHaspopup","ariaActivedescendant","canSetSelection","computedType","clearClasses","classes","computedAutocomplete","autocomplete","computedClassForIconLeft","className","computedIconLeft","iconLeft","hasCustomDisplaySlot","hasError","isArray","errors","hasInputLeftSlot","hasSlotContent","hasInputRightSlot","inputDescribedBy","inputId","shadowRoot","inputMode","inputModeMap","tin","isMaskedType","maskedTypes","messages","hints","showIconSeparator","hideMessages","String","visibilityToggleAriaLabel","visibilityToggleText","wrapperClasses","classNames","iconRight","valueLength","startingPosition","previousValueLength","hasSelection","getSelection","formattedLength","currentValueLength","defaultPosition","countDOM","showCount","valueChangedFromProperty","formattingFunctions","formatModifier","inputType","cursorMap","valueBeforeCursor","isPrevCharAlphaNum","test","leftIndex","rightIndex","afterCursorOffset","newCursorOffset","valueAfterCursor","isNextCharAlphaNum","newValue","charactersAfterCursor","newCursorPosition","max","setSelectionRange","nextPaint","inputContainerDOM","name","onClick","pseudoInputDOM","standardInputDOM","showVisibilityToggle","badgeValue","theme","badgeTheme","showPlaceholder","placeholder","onFocus","onBlur","cursorData","difference","newPosition","inputClasses","min","step","current","optional","autocapitalize","autocorrect","readonly","_preventEntry","onKeyDown","onInput","onPaste","inputmode","pattern","labelDOM","messagesDOM","q2LoadingCss","Q2LoadingStyle0","Q2Loading","halfCircleSpinner","localizedLabel","skeletonLoader","shape","skeletonShape","spinner","countsArray","counts","map","loader","loaderMap","default","skeleton","modifiersSet","skeletonShapes","call","shapes","spinnerShape","spinnerMap","q2TabContainerCss","Q2TabContainerStyle0","Q2TabContainer","lastScrolled","Date","getTime","checkScrollState","listElement","scrollLeft","scrollWidth","clientWidth","scrollEnabled","showScrollLeft","showScrollRight","ceil","moveToAdjacentTab","direction","index","tabs","indexOf","newIndex","moveToTab","shouldFocus","focusedValue","focusedTab","preventScroll","left","offsetLeft","scrollTo","behavior","onScrollBtnClick","halfWidth","floor","scrollAmount","abs","scrollBy","onSlotChange","onTabClick","targetValue","closest","dataset","isAlreadySelected","onTabKeyDown","setTabs","tabPanes","badgeCount","badgeDescription","badgeStatus","updateTabData","updateTabPaneProps","tab","selected","selectedTabValue","attributes","findIndex","hasTabs","settled","onBadge","defaultChangeHandler","onResize","nameObserver","resizeIframe","tabList","filter","pane","renderTab","isSelected","renderTabWithBadge","status","window","TectonElements","onScroll","noPrint","q2TabPaneCss","Q2TabPaneStyle0","Q2TabPane","badgeObserver"],"sources":["src/components/q2-badge/q2-badge.scss?tag=q2-badge&encapsulation=shadow","src/components/q2-badge/q2-badge.tsx","src/components/q2-btn/q2-btn.scss?tag=q2-btn&encapsulation=shadow","src/components/q2-btn/q2-btn.tsx","src/components/q2-icon/q2-icon.scss?tag=q2-icon&encapsulation=shadow","src/components/q2-icon/q2-icon.tsx","src/components/q2-input/formatting/number.ts","src/components/q2-input/formatting/generic.ts","src/components/q2-input/formatting/currency.ts","src/components/q2-input/formatting/phone.ts","src/components/q2-input/formatting/ssn.ts","src/components/q2-input/formatting/tin.ts","src/components/q2-input/formatting/alphanumeric.ts","src/components/q2-input/formatting/alpha.ts","src/components/q2-input/formatting/numeric.ts","src/components/q2-input/formatting/postal.ts","src/components/q2-input/formatting/date.ts","src/components/q2-input/formatting/credit-card.ts","src/components/q2-input/q2-input.scss?tag=q2-input&encapsulation=shadow","src/components/q2-input/q2-input.tsx","src/components/q2-loading/q2-loading.scss?tag=q2-loading&encapsulation=shadow","src/components/q2-loading/q2-loading.tsx","src/components/q2-tab-container/q2-tab-container.scss?tag=q2-tab-container&encapsulation=shadow","src/components/q2-tab-container/q2-tab-container.tsx","src/components/q2-tab-pane/q2-tab-pane.scss?tag=q2-tab-pane&encapsulation=shadow","src/components/q2-tab-pane/q2-tab-pane.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: inline-block;\n}\n\n.badge-wrapper {\n --comp-badge-background: #{var-list(--tct-badge-background, --t-gray8, #61c4ff)};\n --comp-badge-color: #{var-list(--tct-badge-color, --t-base, #ffffff)};\n --comp-badge-border-style: #{var-list(--tct-badge-border-style, solid)};\n --comp-badge-border-color: #{var-list(--tct-badge-border-color, --t-secondary-l1, #9a9898)};\n\n :host([status='info']) & {\n --comp-badge-background: #{var-list(--tct-badge-info-background, --const-stoplight-info, #0079c1)};\n --comp-badge-color: #{var-list(--tct-badge-info-color, --const-stoplight-info-text, #ffffff)};\n --comp-badge-border-color: #{var-list(--tct-badge-info-border-color, --const-stoplight-info-l1, #3a9bd6)};\n }\n\n :host([status='alert']) & {\n --comp-badge-background: #{var-list(--tct-badge-alert-background, --const-stoplight-alert, #d20a0a)};\n --comp-badge-color: #{var-list(--tct-badge-alert-color, --const-stoplight-alert-text, #ffffff)};\n --comp-badge-border-color: #{var-list(--tct-badge-alert-border-color, --const-stoplight-alert-l1, #e42929)};\n }\n\n :host([status='warning']) & {\n --comp-badge-background: #{var-list(--tct-badge-warning-background, --const-stoplight-warning, #c35500)};\n --comp-badge-color: #{var-list(--tct-badge-warning-color, --const-stoplight-warning-text, #423535)};\n --comp-badge-border-color: #{var-list(--tct-badge-warning-border-color, --const-stoplight-warning-l1, #f9ce4c)};\n }\n\n :host([status='success']) & {\n --comp-badge-background: #{var-list(--tct-badge-success-background, --const-stoplight-success, #57fc45)};\n --comp-badge-color: #{var-list(--tct-badge-success-color, --const-stoplight-success-text, #ffffff)};\n --comp-badge-border-color: #{var-list(--tct-badge-success-border-color, --const-stoplight-success-l1, #2eaa21)};\n }\n\n :host([theme='primary']) & {\n --comp-badge-background: #{var-list(--tct-badge-primary-background, --t-primary, #0079c2)};\n --comp-badge-color: #{var-list(--tct-badge-primary-color, --t-primary-text, #ffffff)};\n --comp-badge-border-color: #{var-list(--tct-badge-primary-border-color, --t-primary-l1, #3a9bd6)};\n }\n\n :host([theme='secondary']) & {\n --comp-badge-background: #{var-list(--tct-badge-secondary-background, --t-secondary, #b4c2cd)};\n --comp-badge-color: #{var-list(--tct-badge-secondary-color, --t-secondary-text, #ffffff)};\n --comp-badge-border-color: #{var-list(--tct-badge-secondary-border-color, --t-secondary-l1, #c6d1db)};\n }\n\n :host([theme='tertiary']) & {\n --comp-badge-background: #{var-list(--tct-badge-tertiary-background, --t-tertiary, #e9f5fc)};\n --comp-badge-color: #{var-list(--tct-badge-tertiary-color, --t-tertiary-text, #000000)};\n --comp-badge-border-color: #{var-list(--tct-badge-tertiary-border-color, --t-tertiary-l1, #f3f4f5)};\n }\n}\n\n.badge {\n font-size: var-list(--tct-badge-font-size, 10px);\n line-height: var-list(--tct-badge-line-height, 14px);\n height: var-list(--tct-badge-height, 16px);\n min-width: var-list(--tct-badge-min-width, 16px);\n text-align: center;\n padding: var-list(--tct-badge-padding, unquote('0 4px'));\n color: var(--comp-badge-color);\n background: var(--comp-badge-background);\n border-style: var(--comp-badge-border-style);\n border-color: var(--comp-badge-border-color);\n border-width: var-list(var-prefixer(badge-border-width), 1px);\n border-radius: var-list(var-prefixer(badge-border-radius), 8px);\n}\n\n.badge.size-large {\n font-size: var-list(--tct-badge-large-font-size, 14px);\n line-height: var-list(--tct-badge-large-line-height, 20px);\n height: var-list(--tct-badge-large-height, 22px);\n min-width: var-list(--tct-badge-large-min-width, 22px);\n border-radius: var-list(--tct-badge-large-border-radius, 11px);\n padding: var-list(--tct-badge-large-padding, unquote('0 6px'));\n}\n\n.badge-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n","import { Component, Prop, h, ComponentInterface, Element, Fragment } from '@stencil/core';\n\n@Component({ tag: 'q2-badge', shadow: true, styleUrl: 'q2-badge.scss' })\nexport class Q2Badge implements ComponentInterface {\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /** The number of digits to show. */\n @Prop({ reflect: true })\n maxLength: number | undefined;\n\n /** The size of the badge. */\n @Prop({ reflect: true })\n size: 'default' | 'large' | undefined;\n\n /** The stoplight color of the element when `theme` is not present. */\n @Prop({ reflect: true })\n status: 'info' | 'alert' | 'warning' | 'success' | undefined;\n\n /**\n * The color of the badge when in the active state.\n * The `theme` has higher priority than `status`.\n */\n @Prop({ reflect: true })\n theme: 'primary' | 'secondary' | 'tertiary' | undefined;\n\n /** The number to display in the badge. `q2-badge` also allows slot HTML elements which can be any string. */\n @Prop({ reflect: true })\n value: number = 0;\n\n // #endregion\n // #region Local Methods\n\n get badgeText(): string {\n const maxValue = Math.pow(10, this.maxLength || 2) - 1;\n let value: string | number = this.value || 0;\n if (isNaN(value) || value <= 0) {\n value = '';\n } else if (value <= maxValue) {\n value = Number(value).toLocaleString();\n } else {\n value = Number(maxValue).toLocaleString() + '+';\n }\n return value;\n }\n\n get hasSlot(): boolean {\n return !!this.hostElement.innerHTML.trim();\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n const badgeClass = ['badge'];\n if (this.size === 'large') badgeClass.push('size-large');\n return !this.badgeText && !this.hasSlot ? (\n <Fragment />\n ) : (\n <div class=\"badge-wrapper\">\n <div class={badgeClass.join(' ')}>\n <span class=\"badge-text\">{this.hasSlot ? <slot></slot> : this.badgeText}</span>\n </div>\n </div>\n );\n }\n\n // #endregion\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n@import './q2-btn-mixins';\n\n:host {\n display: inline-block;\n}\n\n:host([hidden]) {\n display: none;\n}\n\n:host([block]) {\n display: block;\n width: 100%;\n}\n\n::slotted(q2-icon) {\n pointer-events: none;\n margin-block: -100px;\n}\n\n:host {\n --comp-font-weight: 600;\n --comp-border-radius: #{var-list(--tct-btn-border-radius, --app-border-radius-1, 4px)};\n --comp-btn-tween: #{var-list(var-prefixer(btn-tween), --tct-tween-1, --app-tween-1, unquote('0.2s ease'))};\n --comp-btn-fallback-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);\n --comp-background-alternative: #ebf8ff;\n .btn-height-wrapper {\n height: var(--comp-btn-min-height, 44px);\n cursor: pointer;\n &:active {\n box-shadow: none;\n }\n }\n}\n\nbutton {\n margin: var-list(--tct-scale-0, --app-scale-0x, 0);\n padding: var-list(--tct-scale-0, --app-scale-0x, 0);\n display: inline-block;\n width: 100%;\n hyphens: auto;\n border: var(--tct-btn-border);\n border-radius: var(--tct-btn-border-radius);\n background: transparent;\n box-shadow: none;\n border-radius: 0;\n font-weight: 400;\n color: inherit;\n cursor: pointer;\n transition: var(--comp-btn-tween);\n transition-property: background, color, box-shadow, fill, border-color, border-width;\n outline: 0;\n &:disabled {\n opacity: var-list(var-prefixer(btn-disabled-opacity), --tct-disabled-opacity, --app-disabled-opacity, 0.4);\n cursor: not-allowed;\n }\n\n // Sizes\n :host([color]:not([size])) &,\n :host([intent]:not([size])) & {\n padding: var-list(var-prefixer(btn-padding), --tct-scale-2, --app-scale-2x, 10px);\n }\n :host([size='1']) & {\n padding: var-list(--tct-scale-1, --app-scale-1x, 5px);\n }\n :host([size='2']) & {\n padding: var-list(--tct-scale-2, --app-scale-2x, 10px);\n }\n :host([size='3']) & {\n padding: var-list(--tct-scale-3, --app-scale-3x, 15px);\n }\n :host([size='4x']) & {\n padding: var-list(--tct-scale-4x, --app-scale-4x, 20px);\n }\n :host([size='4']) & {\n padding: var-list(--tct-scale-6x, --app-scale-6x, 30px);\n }\n\n // Colors\n :host([color]) &,\n :host([intent]) & {\n font-size: var-list(var-prefixer(btn-font-size), inherit);\n border-radius: var-list(--tct-btn-border-radius, --comp-border-radius);\n text-transform: var-list(--tct-btn-text-transform, --comp-text-transform);\n letter-spacing: var-list(--tct-btn-letter-spacing, --comp-letter-spacing);\n }\n\n :host([size='small']) & {\n padding: var-list(var-prefixer(btn-padding-size-small), '4px 16px');\n font-size: var-list(var-prefixer(btn-font-size-small), 14px);\n }\n :host([size='medium']) & {\n padding: var-list(var-prefixer(btn-padding-size-medium), '12px 24px');\n font-size: var-list(var-prefixer(btn-font-size-medium), 16px);\n }\n :host([size='large']) & {\n padding: var-list(var-prefixer(btn-padding-size-large), '16px 32px');\n font-size: var-list(var-prefixer(btn-font-size-large), 20px);\n }\n\n :host([color='primary']) &,\n :host([intent='workflow-primary']) & {\n --comp-background: #{var-list(\n --tct-btn-primary-background,\n --tct-btn-primary-bg,\n --t-a11y-active-gray-color-AA,\n #404040\n )};\n --comp-hover-background: #{var-list(--tct-btn-primary-hover-background, --tct-btn-primary-hover-bg)};\n --comp-font-color: #{var-list(--tct-btn-primary-font-color, --app-white, #ffffff)};\n --comp-box-shadow: #{var-list(--tct-btn-primary-box-shadow, --comp-btn-fallback-box-shadow)};\n --comp-focus-box-shadow: #{var-list(--tct-btn-primary-focus-box-shadow, --comp-btn-fallback-box-shadow)};\n // different background for active\n --comp-active-background: var(--tct-btn-primary-active-background, #0063a0);\n @include btn-ring(primary, hover, --comp-background, --comp-font-color, null);\n @include btn-ring(primary, active, transparent, transparent, --comp-box-shadow);\n @include btn-ring(primary, disabled, transparent, transparent, --comp-box-shadow);\n @include btn-ring(primary, focus-visible, --const-focus-color, --comp-font-color, null);\n @include btn-intent(primary);\n @include btn-icon-color(primary, --comp-font-color);\n }\n\n :host([color='secondary']) &,\n :host([intent='workflow-secondary']) & {\n --comp-background: #{var-list(\n --tct-btn-secondary-background,\n --tct-btn-secondary-bg,\n --t-button-default-bg,\n #cccccc\n )};\n --comp-hover-background: #{var-list(\n --tct-btn-secondary-hover-background,\n --tct-btn-secondary-hover-bg,\n --t-a11y-active-gray-color-AA,\n #404040\n )};\n --comp-hover-font-color: var(--app-white, #ffffff);\n --comp-box-shadow: #{var-list(--tct-btn-secondary-box-shadow, --comp-btn-fallback-box-shadow)};\n --comp-focus-box-shadow: #{var-list(--tct-btn-secondary-focus-box-shadow, --comp-btn-fallback-box-shadow)};\n @include btn-ring(secondary, hover, --comp-hover-background, --app-white, null);\n @include btn-ring(secondary, active, transparent, transparent, --comp-box-shadow);\n @include btn-ring(secondary, disabled, transparent, transparent, --comp-box-shadow);\n @include btn-ring(secondary, focus-visible, --const-focus-color, --app-white, null);\n @include btn-intent(secondary);\n @include btn-icon-color(secondary, --comp-font-color);\n }\n\n :host([intent='workflow-destroy']) & {\n --comp-background: #{var-list(--tct-btn-destroy-background, --const-stoplight-alert, #d20a0a)};\n --comp-font-color: #{var-list(--tct-btn-destroy-font-color, --app-white)};\n --comp-box-shadow: #{var-list(--tct-btn-destroy-box-shadow, --comp-btn-fallback-box-shadow)};\n --comp-focus-box-shadow: #{var-list(--tct-btn-destroy-focus-box-shadow, --comp-btn-fallback-box-shadow)};\n @include btn-ring(destroy, hover, --comp-background, --comp-font-color, null);\n @include btn-ring(destroy, active, transparent, transparent, --comp-box-shadow);\n @include btn-ring(destroy, disabled, transparent, transparent, --comp-box-shadow);\n @include btn-ring(destroy, focus-visible, --const-focus-color, --comp-font-color, null);\n @include btn-intent(destroy);\n @include btn-icon-color(destroy, --comp-font-color);\n }\n\n :host([intent='workflow-escape']) & {\n --comp-background: #{var-list(--tct-btn-escape-background, --app-white, #ffffff)};\n --comp-font-color: #{var-list(\n --tct-btn-escape-font-color,\n --tct-btn-primary-background,\n --tct-btn-primary-bg,\n --t-a11y-active-gray-color-AA,\n #404040\n )};\n --comp-box-shadow: #{var-list(--tct-btn-escape-box-shadow, --comp-btn-fallback-box-shadow)};\n --comp-hover-box-shadow: #{var-list(--tct-btn-escape-hover-box-shadow, --comp-btn-fallback-box-shadow)};\n --comp-focus-box-shadow: #{var-list(--tct-btn-escape-focus-box-shadow, --comp-btn-fallback-box-shadow)};\n // different background for hover/active/focus\n --comp-hover-background: #{var-list(--tct-btn-escape-hover-background, --comp-background-alternative)};\n --comp-active-background: #{var-list(--tct-btn-escape-active-background, --comp-background-alternative)};\n --comp-focus-background: #{var-list(--tct-btn-escape-focus-background, --comp-background-alternative)};\n @include btn-ring(escape, hover, --comp-font-color, --comp-background, null);\n @include btn-ring(escape, active, transparent, transparent, --comp-box-shadow);\n @include btn-ring(escape, disabled, transparent, transparent, --comp-box-shadow);\n @include btn-ring(escape, focus-visible, --const-focus-color, --comp-background, null);\n @include btn-intent(escape);\n @include btn-icon-color(escape, --comp-font-color);\n }\n\n :host([intent='neutral']) & {\n --comp-background: #{var-list(--tct-btn-neutral-background, --app-white, #ffffff)};\n --comp-font-color: #{var-list(\n --tct-btn-neutral-font-color,\n --tct-btn-primary-background,\n --tct-btn-primary-bg,\n --t-a11y-active-gray-color-AA,\n #404040\n )};\n --comp-box-shadow: #{var-list(--tct-btn-neutral-box-shadow, --comp-btn-fallback-box-shadow)};\n --comp-focus-box-shadow: #{var-list(--tct-btn-neutral-focus-box-shadow, --comp-btn-fallback-box-shadow)};\n // use outline instead border: because on/off border makes the button shaking on hover/focus/active\n --comp-border-width: 1px;\n --comp-border-style: solid;\n --comp-border-color: var(--comp-font-color);\n @include btn-ring(neutral, hover, --comp-font-color, --app-white, null);\n @include btn-ring(neutral, active, transparent, transparent, --comp-box-shadow);\n @include btn-ring(neutral, disabled, transparent, transparent, --comp-box-shadow);\n @include btn-ring(neutral, focus-visible, --const-focus-color, --comp-background, null);\n @include btn-intent(neutral);\n @include btn-icon-color(neutral, --comp-font-color);\n }\n\n :host([intent='neutral-text']) & {\n --comp-background: #{var-list(\n --tct-btn-neutral-text-background,\n --tct-btn-neutral-text-bg,\n --app-white,\n #ffffff\n )};\n --comp-font-color: #{var-list(\n --tct-btn-neutral-text-font-color,\n --tct-btn-primary-background,\n --tct-btn-primary-bg,\n --t-a11y-active-gray-color-AA,\n #404040\n )};\n --comp-box-shadow: var(--tct-btn-neutral-text-box-shadow);\n --comp-hover-text-decoration: underline;\n // different background for focus\n --comp-focus-background: #{var-list(--tct-btn-neutral-text-focus-background, --comp-background-alternative)};\n @include btn-ring(neutral-text, hover, --comp-font-color, --comp-background, null);\n @include btn-ring(neutral-text, active, transparent, transparent, --comp-box-shadow);\n @include btn-ring(neutral-text, disabled, transparent, transparent, --comp-box-shadow);\n @include btn-ring(neutral-text, focus-visible, --const-focus-color, --app-white, null);\n @include btn-intent(neutral-text);\n @include btn-icon-color(neutral-text, --comp-font-color);\n }\n\n // Icons\n :host(:not([size])) &.icon-only {\n width: var-list(var-prefixer(btn-icon-width), 44px);\n height: var-list(var-prefixer(btn-icon-height), 44px);\n border-radius: var-list(var-prefixer(btn-icon-border-radius), --tct-btn-border-radius, 0);\n }\n\n :host(:not([color]):not([intent])),\n &.icon-only {\n &:hover,\n &:focus {\n background: var-list(\n --tct-btn-icon-hover-background,\n var-prefixer(btn-icon-hover-bg),\n var-prefixer(gray-13),\n --tct-gray-l3,\n --app-gray-l3,\n #f2f2f2\n );\n }\n }\n\n :host(:not([intent])[active]) &.icon-only {\n background-color: var-list(\n --tct-btn-icon-active-background,\n var-prefixer(btn-icon-active-bg),\n var-prefixer(gray-14),\n --tct-gray-l3,\n --app-gray-l3,\n #f2f2f2\n );\n }\n\n :host(:not([intent])) &.icon-only:hover *,\n :host(:not([intent])) &.icon-only:focus *,\n :host(:not([intent])[active]) &.icon-only * {\n color: var-list(var-prefixer(btn-icon-hover-color), var-prefixer(link-hover-color), #080808);\n }\n\n // Plain\n :host(:not([intent])) &:not(.icon-only) {\n height: var-list(--tct-btn-height, auto);\n padding-inline: var-list(--tct-btn-padding-inline, 0);\n font-weight: var-list(--tct-btn-font-weight);\n border-radius: var-list(--tct-btn-border-radius, 0);\n\n &:hover,\n &:focus {\n background: var(--tct-btn-hover-background);\n }\n }\n\n // Badges\n :host([badge]) & {\n padding: var-list(var-prefixer(btn-badge-padding), unquote('2px 5px'));\n font-size: var-list(var-prefixer(btn-badge-font-size), var-prefixer(btn-font-size), inherit);\n border-radius: var-list(\n var-prefixer(btn-badge-border-radius),\n --tct-border-radius-1,\n --app-border-radius-1,\n 4px\n );\n background-color: var-list(--tct-btn-badge-background, var-prefixer(btn-badge-bg), transparent);\n color: var-list(var-prefixer(btn-badge-font-color), inherit);\n\n ::slotted(q2-icon) {\n --tct-icon-size: 1em;\n }\n }\n\n :host([badge]:hover) &:enabled {\n background-color: var-list(\n --tct-btn-badge-hover-background,\n var-prefixer(btn-badge-hover-bg),\n var-prefixer(gray-14),\n --tct-gray-l3,\n --app-gray-l3,\n #f2f2f2\n );\n color: var-list(\n var-prefixer(btn-badge-hover-font-color),\n var-prefixer(gray-5),\n --tct-gray-d2,\n --app-gray-d2,\n #404040\n );\n }\n\n :host(.selected[badge]) &,\n :host([active][badge]) & {\n background-color: var-list(\n --tct-btn-badge-active-background,\n var-prefixer(btn-badge-active-bg),\n --comp-btn-primary-background\n );\n color: var-list(var-prefixer(btn-badge-active-font-color), --comp-btn-primary-font-color);\n }\n}\n\ndiv {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var-list(--app-scale-1x, 5px);\n\n :host([loading]) .icon-right & {\n flex-direction: row-reverse;\n }\n}\n\nq2-loading {\n --tct-loading-primary-color: currentcolor;\n --tct-loading-secondary-color: currentcolor;\n --tct-loading-spinner-size: 24px;\n}\n\n:host([loading]) ::slotted(q2-icon) {\n display: none;\n}\n:host([loading]) button {\n pointer-events: none;\n}\n\n:host([block]) button,\n:host([block]) button.icon-only {\n display: block;\n width: 100%;\n}\n","import { Component, State, Prop, h, ComponentInterface, Watch, Listen, Element, Fragment } from '@stencil/core';\nimport {\n getAriaValueFromProp,\n handleAriaLabel,\n handleColor,\n isEventFromElement,\n loc,\n overrideFocus,\n handleDeprecationWarning,\n} from 'src/utils';\n\n@Component({ tag: 'q2-btn', shadow: true, styleUrl: 'q2-btn.scss' })\nexport class Q2Btn implements ComponentInterface {\n // #region Own Properties\n\n primaryBtn: HTMLButtonElement;\n primaryBtnWrapper: HTMLElement;\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 iconPosition: 'left' | 'right' | 'only';\n\n // #endregion\n // #region Public Property API\n\n /**\n * @private\n * Role attribute for better semantic accessibility support\n */\n @Prop({ reflect: true })\n _role: string;\n\n /**\n * Displays the component in an active state.\n *\n * @info\n * Only intended for use with the `badge` property.\n * @deprecated\n */\n @Prop({ reflect: true })\n active: boolean;\n\n @Prop()\n ariaControls: string;\n\n @Prop()\n ariaExpanded: string;\n\n @Prop()\n ariaHasPopup: string;\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n @Prop()\n ariaPressed: string;\n\n @Prop()\n ariaSelected: string;\n\n /**\n * Displays the component in a smaller, badge style.\n * @deprecated\n */\n @Prop({ reflect: true })\n badge: boolean;\n\n /** The component expands to fill the width of its parent element. */\n @Prop({ reflect: true })\n block: boolean;\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n color: string; // deprecated but need it to use utils/handleColor\n\n @Prop()\n description: string;\n\n /** Marks the component as disabled and displays a `not-allowed` cursor on hover. */\n @Prop({ reflect: true })\n disabled: boolean;\n\n /** @deprecated */\n @Prop({ reflect: true })\n fab: boolean;\n\n /**\n * Hides the `label`, and assigns its value to the `aria-label` attribute on the `<button>` element.\n */\n @Prop({ reflect: true, mutable: true })\n hideLabel: boolean;\n\n /**\n * Indicates the role of the component in the workflow, which will apply appropriate styling to the component.\n */\n @Prop({ reflect: true, mutable: true })\n intent:\n | 'workflow-primary'\n | 'workflow-secondary'\n | 'workflow-destroy'\n | 'workflow-escape'\n | 'neutral'\n | 'neutral-text';\n\n /**\n * Defines the text content of the button if it is not provided in the `<slot>` of the element.\n * Also used for the `aria-label` of the `<button>` element when only displaying an icon.\n *\n * @localizable\n */\n @Prop({ reflect: true, mutable: true })\n label: string;\n\n /** Displays the button with a loading spinner to indicate something is happening in the background and the user should not click again. */\n @Prop({ reflect: true })\n loading: boolean;\n\n /**\n * Defines the size of q2-btn, it renders as default size if not provided.\n */\n @Prop({ reflect: true })\n size: 'small' | 'medium' | 'large';\n\n @Prop()\n tabIndex: number;\n\n /** The default behavior of the button. */\n @Prop({ reflect: true })\n type: string = 'button';\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n this.handleIcons();\n handleAriaLabel(this);\n handleColor(this);\n }\n\n componentDidLoad(): void {\n this.handleButtonSize();\n overrideFocus(this.hostElement);\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('click', { capture: true })\n handleClick(event: Event) {\n if (this.loading || this.disabled) {\n event.stopImmediatePropagation();\n }\n this.primaryBtn.focus();\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.primaryBtn.focus();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\n }\n\n @Watch('size')\n sizeObserver() {\n this.handleButtonSize();\n }\n\n // #endregion\n // #region Local Methods\n\n get buttonAttributes() {\n return {\n ariaExpanded: getAriaValueFromProp(this.ariaExpanded, ['true', 'false']),\n ariaHasPopup: getAriaValueFromProp(this.ariaHasPopup, [\n 'true',\n 'false',\n 'menu',\n 'listbox',\n 'tree',\n 'grid',\n 'dialog',\n ]),\n ariaLabel: this.label && this.hideLabel ? loc(this.label) : undefined,\n ariaSelected: getAriaValueFromProp(this.ariaSelected, ['true', 'false']),\n ariaPressed: getAriaValueFromProp(this.ariaPressed, ['true', 'false']),\n description: this.description !== undefined ? this.description : undefined,\n disabled: this.disabled || false,\n type: this.type,\n tabindex: this.tabIndex || undefined,\n };\n }\n\n handleButtonSize = () => {\n if (Number(this.size) <= 4) {\n handleDeprecationWarning(this, 'size', 'prop');\n }\n };\n\n handleIcons = () => {\n // Only allow one icon in the button\n const icon = Array.from(this.hostElement.querySelectorAll(':scope > q2-icon')).reduce((acc, element) => {\n if (acc) element.remove();\n else acc = element;\n return acc;\n }, null);\n\n const hasIcon = !!icon;\n const hasLoc = !!this.hostElement.querySelector('q2-loc');\n const hasText = !!this.hostElement.textContent.trim();\n const hasIconLeft = (hasLoc || hasText) && hasIcon && this.hostElement.firstElementChild === icon;\n const hasIconRight = (hasLoc || hasText) && hasIcon && this.hostElement.lastElementChild === icon;\n const hasIconOnly = !hasIconLeft && !hasIconRight && hasIcon;\n\n let iconPosition;\n if (hasIconOnly) iconPosition = 'only';\n else if (hasIconLeft) iconPosition = 'left';\n else if (hasIconRight) iconPosition = 'right';\n this.iconPosition = iconPosition;\n };\n\n handleSlotChange = () => {\n this.handleIcons();\n };\n\n // #endregion\n // #region Render Methods\n\n renderButton = () => {\n const { ariaExpanded, ariaHasPopup, ariaSelected, ariaPressed, description, disabled, type, tabindex } =\n this.buttonAttributes;\n const { iconPosition, loading, badge, label, hideLabel } = this;\n const renderLoadingSpinner = iconPosition || loading;\n const isLoadingSpinnerInline = !iconPosition || badge;\n return (\n <Fragment>\n <button\n ref={el => (this.primaryBtn = el ?? this.primaryBtn)}\n aria-expanded={ariaExpanded}\n aria-haspopup={ariaHasPopup}\n aria-label={hideLabel && loc(label)}\n aria-selected={ariaSelected}\n aria-pressed={ariaPressed}\n disabled={disabled}\n type={type}\n tabindex={tabindex}\n test-id=\"q2BtnInnerButton\"\n class={iconPosition ? `icon-${iconPosition}` : ''}\n aria-describedby={!!description ? 'hidden-description' : undefined}\n role={this._role || undefined}\n >\n <div>\n {renderLoadingSpinner && (\n <q2-loading\n hidden={!loading}\n modifiers={isLoadingSpinnerInline ? 'inline' : undefined}\n />\n )}\n {!hideLabel && label ? loc(label) : <slot onSlotchange={this.handleSlotChange} />}\n </div>\n </button>\n {!!description && (\n <div\n id=\"hidden-description\"\n aria-hidden=\"true\"\n class=\"sr\"\n >\n {description}\n </div>\n )}\n </Fragment>\n );\n };\n\n render = () => {\n return this.size === 'small' ? (\n // wrap only for small sized\n <div\n class=\"btn-height-wrapper\"\n ref={el => (this.primaryBtnWrapper = el ?? this.primaryBtnWrapper)}\n tabIndex={-1}\n >\n {this.renderButton()}\n </div>\n ) : (\n this.renderButton()\n );\n };\n\n // #endregion\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: inline-block;\n height: var(--tct-icon-size, 24px);\n width: var(--tct-icon-size, 24px);\n position: relative;\n fill: none;\n}\n\n:host([inline]) {\n height: 1em;\n width: 1em;\n}\n\nsvg {\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n stroke-width: var-list(--tct-icon-stroke-width, --t-icon-stroke-width, 1.5);\n stroke-linecap: var-list(--tct-icon-cap, --t-icon-cap, round);\n stroke-linejoin: var-list(--tct-icon-cap, --t-icon-cap, round);\n transition: var(--tct-icon-transition, none);\n}\n\n.stroke-primary {\n stroke: var-list(--tct-icon-stroke-primary, --t-icon-stroke-primary, --t-text, currentcolor);\n transition: var(--tct-icon-stroke-primary-transition, none);\n}\n\n.stroke-secondary {\n stroke: var-list(--tct-icon-stroke-secondary, --t-icon-stroke-secondary, --t-text, currentcolor);\n transition: var(--tct-icon-stroke-secondary-transition, none);\n}\n\n.fill-primary {\n fill: var-list(--tct-icon-stroke-primary, --t-icon-stroke-primary, --t-text, currentcolor);\n transition: var(--tct-icon-stroke-primary-transition, none);\n}\n\n.fill-secondary {\n fill: var-list(--tct-icon-stroke-secondary, --t-icon-stroke-secondary, --t-text, currentcolor);\n transition: var(--tct-icon-stroke-secondary-transition, none);\n}\n\n.filled {\n fill: var-list(--tct-icon-fill, --comp-icon-fill, --t-icon-fill, none);\n transition: var(--tct-icon-fill-transition, none);\n}\n\n.uniform {\n fill: var-list(--tct-icon-stroke-primary, --t-icon-stroke-primary, currentcolor);\n transition: var(--tct-icon-stroke-primary-transition, none);\n}\n\n:host([type='info']),\n:host([type='info-filled']) {\n --tct-icon-stroke-primary: transparent;\n --comp-status-color: #{var-list(--tct-stoplight-info, --const-stoplight-info, #0079c1)};\n}\n\n:host([type='success']),\n:host([type='success-filled']) {\n --tct-icon-stroke-primary: transparent;\n --comp-status-color: #{var-list(--tct-stoplight-success, --const-stoplight-success, #0e8a00)};\n}\n\n:host([type='warning']),\n:host([type='warning-filled']) {\n --tct-icon-stroke-primary: transparent;\n --comp-status-color: #{var-list(--tct-stoplight-warning, --const-stoplight-warning, #c35500)};\n}\n\n:host([type='error']),\n:host([type='error-filled']) {\n --tct-icon-stroke-primary: transparent;\n --comp-status-color: #{var-list(--tct-stoplight-alert, --const-stoplight-alert, #d20a0a)};\n}\n","import { Component, ComponentInterface, Prop, h, Element, Watch, getAssetPath, State } from '@stencil/core';\nimport { createGuid } from 'src/utils';\nimport iconMap from './assets/icon-map.json';\n\n@Component({ tag: 'q2-icon', shadow: true, styleUrl: 'q2-icon.scss', assetsDirs: ['assets'] })\nexport class Q2Icon implements ComponentInterface {\n // #region Own Properties\n\n spriteGroup: SVGElement;\n spriteUse: SVGElement;\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 iconClone: SVGSymbolElement;\n\n // #endregion\n // #region Public Property API\n\n /** Styles the component to have a `height` and `width` of `1em`, making it easy to place alongside text. */\n @Prop({ reflect: true })\n inline: boolean;\n\n /** The text that is presented by screen-readers when they encounter the icon. */\n @Prop({ reflect: true })\n label: string;\n\n /** The name of the icon to be displayed. */\n @Prop({ reflect: true })\n type: string;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n this.handleIcon();\n }\n\n componentDidRender(): void {\n if (!this.iconClone) return;\n this.spriteGroup?.firstElementChild?.remove();\n const appendedClone = this.spriteGroup?.appendChild(this.iconClone);\n\n // We have to set the `href` attribute after the symbol is appended to the DOM to avoid a bug in Safari\n this.spriteUse?.setAttribute('href', `#${appendedClone.id}`);\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('type')\n handleIcon() {\n if (this.isCustom) {\n this.setCustomSVGAttrs();\n } else if (this.type) {\n this.fetchSprite();\n } else {\n this.iconClone = null;\n this.spriteGroup?.firstElementChild?.remove();\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get iconCloneViewBox() {\n return this.iconClone?.getAttribute('viewBox') ?? '0 0 24 24';\n }\n\n get isCustom() {\n return this.type === 'custom';\n }\n\n get spriteElement() {\n const { spriteId } = this;\n if (!spriteId) return;\n return document.querySelector<HTMLElement>(`#${spriteId}`);\n }\n\n get spriteEventName() {\n const { spriteFileName } = this;\n if (!spriteFileName) return;\n return `tct-loaded-${spriteFileName}`;\n }\n\n get spriteFileName() {\n if (this.isCustom) return;\n return iconMap[this.type];\n }\n\n get spriteId() {\n const { spriteFileName } = this;\n if (!spriteFileName) return;\n return `tecton-sprite-${spriteFileName}`;\n }\n\n checkForSprite() {\n const { spriteId, spriteEventName } = this;\n const spriteContainer = this.getOrCreateSpriteContainer();\n let spriteElement: HTMLElement = document.querySelector(`#${spriteId}`);\n\n // If the sprite element exists and has the `data-loaded` attribute, we know we have everything we need\n if (spriteElement?.hasAttribute('data-loaded') ?? false) {\n this.cloneSpriteNode();\n return true;\n }\n\n // If the sprite element exists but does not have the `data-loaded` attribute, we know it's being loaded\n // We'll listen for the event that will be dispatched when the sprite is loaded\n spriteContainer.addEventListener(\n spriteEventName,\n () => {\n this.cloneSpriteNode();\n },\n { once: true }\n );\n\n // If the sprite element exists, we know it's being loaded and will be handled by the event listener\n if (spriteElement) return true;\n\n // If sprite element does not exist, create a placeholder\n // This will let other icons know the sprite is being loaded\n spriteElement = document.createElement('div');\n spriteElement.id = spriteId;\n spriteContainer.appendChild(spriteElement);\n return false;\n }\n\n cloneSpriteNode() {\n const spriteContainer = this.getOrCreateSpriteContainer();\n const spriteNode = spriteContainer.querySelector<HTMLElement>(`#tct-${this.type}`);\n this.iconClone = spriteNode ? (spriteNode.cloneNode(true) as SVGSymbolElement) : undefined;\n }\n\n async fetchSprite() {\n const { spriteFileName, spriteId, spriteEventName } = this;\n\n const spriteExists = this.checkForSprite();\n if (spriteExists) return;\n\n if (!spriteFileName) return;\n const spritePath = getAssetPath(`assets/${spriteFileName}.symbol.svg`);\n const response = await fetch(spritePath);\n const data = await response.text();\n const wrappingDiv = document.createElement('div');\n wrappingDiv.innerHTML = data;\n const svg = wrappingDiv.querySelector('svg');\n\n svg.id = spriteId;\n svg.setAttribute('data-loaded', '');\n\n let { spriteElement } = this;\n if (spriteElement?.tagName === 'SVG') return;\n\n if (typeof spriteElement.replaceWith === 'function') {\n spriteElement.replaceWith(svg);\n } else {\n spriteElement.parentNode.replaceChild(svg, spriteElement);\n }\n\n spriteElement = document.querySelector(`#${spriteId}`);\n spriteElement.dispatchEvent(new CustomEvent(spriteEventName, { bubbles: true }));\n }\n\n /**\n * Checks for the sprite container element in the global DOM\n * If it does not exist, it creates and appends it to the body\n */\n getOrCreateSpriteContainer() {\n const spriteContainerId = 'tecton-sprites';\n let spriteContainer: HTMLDivElement = document.querySelector(`#${spriteContainerId}`);\n\n if (spriteContainer) return spriteContainer;\n spriteContainer = document.createElement('div');\n spriteContainer.id = spriteContainerId;\n spriteContainer.style.display = 'none';\n document.body.appendChild(spriteContainer);\n return spriteContainer;\n }\n\n setCustomSVGAttrs() {\n const innerSVG = this.hostElement.querySelector('svg');\n\n if (!innerSVG) return;\n\n innerSVG.setAttribute('role', 'img');\n innerSVG.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n\n const { label } = this;\n if (label) {\n const title = document.createElement('title');\n const labelId = `label-${createGuid()}`;\n title.id = labelId;\n title.textContent = label;\n innerSVG.appendChild(title);\n innerSVG.setAttribute('aria-labelledby', labelId);\n } else {\n innerSVG.setAttribute('aria-hidden', 'true');\n }\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n const { label, type } = this;\n return this.isCustom ? (\n <slot />\n ) : (\n <svg\n aria-hidden={!!label ? undefined : 'true'}\n role={!!label ? 'img' : undefined}\n aria-labelledby={!!label ? 'label' : undefined}\n viewBox={this.iconCloneViewBox}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {!!label && <title id=\"label\">{label}</title>}\n {!!type && <use ref={el => (this.spriteUse = el)} />}\n <g ref={el => (this.spriteGroup = el)}></g>\n </svg>\n );\n }\n\n // #endregion\n}\n","import { IFormatterValueObject, INumberInputFormatOptions } from '../q2-input-types';\n\nexport default function formatNumber(\n val: string = '',\n options: INumberInputFormatOptions = {\n prefix: '',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: '',\n allowDecimal: false,\n allowNegative: true,\n },\n explicit: boolean = false\n): IFormatterValueObject {\n const isNegative = val[0] === '-';\n\n let value = val;\n\n const allowDecimal = !!options.allowDecimal && !!options.decimals;\n\n if (explicit) {\n const parsedValue = value.replace(/[^\\d.]/g, '');\n value = (parsedValue && Number(parsedValue).toFixed(allowDecimal ? options.decimals : 0)) || '';\n }\n\n value = value.replace(/[^\\d]/g, '');\n\n let { integerString, decimalString } = splitValue(value, allowDecimal, options.decimals);\n\n // define decimalString\n let decimalSeparator = options.decimalSeparator;\n if (!allowDecimal) {\n decimalSeparator = '';\n decimalString = '';\n }\n\n // define negative\n const negativeSymbol = options.allowNegative && isNegative ? '-' : '';\n\n value = `${negativeSymbol}${integerString}${decimalSeparator}${decimalString}`;\n\n // format integerString\n integerString = integerString.replace(/\\B(?=(\\d{3})+(?!\\d))/g, options.thousandsSeparator);\n\n const formattedValue: string =\n negativeSymbol || integerString ? `${negativeSymbol}${integerString}${decimalSeparator}${decimalString}` : '';\n\n const fullyFormattedValue: string =\n negativeSymbol || integerString\n ? `${negativeSymbol}${options.prefix}${integerString}${decimalSeparator}${decimalString}${options.suffix}`\n : '';\n\n let formattingCharacterCount = formattedValue.length - value.length;\n\n if (decimalSeparator) {\n formattingCharacterCount = formattingCharacterCount + options.decimalSeparator.length;\n }\n\n const prefix = options.prefix || options.suffix;\n const maxlength = Number.MAX_SAFE_INTEGER.toString().length + formattingCharacterCount + decimalString.length;\n\n const unformattedValue = `${integerString.replace(/[^0-9]/g, '')}${decimalString}`.replace(/^0+/, '');\n\n return {\n value,\n formattedValue,\n fullyFormattedValue,\n prefix,\n suffix: '',\n formattingCharacterCount,\n maxlength,\n unformattedValue,\n };\n}\n\nfunction splitValue(\n value: string,\n allowDecimal: boolean = false,\n decimals: number\n): { integerString: string; decimalString: string } {\n if (!allowDecimal) {\n return {\n integerString: value,\n decimalString: '',\n };\n }\n\n const splitIndex = value.length - decimals;\n\n let integerString = value.substring(0, splitIndex).padStart(1, '0');\n if (integerString.length > 1 && integerString[0] === '0') {\n integerString = integerString.substring(1);\n }\n\n const decimalString = value.substring(splitIndex).padStart(decimals, '0');\n\n return {\n integerString,\n decimalString,\n };\n}\n","import { IFormatterValueObject } from '../q2-input-types';\n\nexport default function formatValue(\n value: string = '',\n mask: string = '',\n options?: {\n prefix?: string;\n suffix?: string;\n }\n): IFormatterValueObject {\n const prefix = (options && options.prefix) || '';\n const suffix = (options && options.suffix) || '';\n\n if (!value || !mask) {\n const fullyFormattedValue = `${prefix}${value}${suffix}`;\n return {\n value,\n formattedValue: value,\n fullyFormattedValue,\n prefix: prefix.trim() || suffix.trim(),\n formattingCharacterCount: 0,\n unformattedValue: value,\n };\n }\n\n const { unformattedValue, formattedValue, formattingCharacterCount } = generateMask(value, mask);\n\n const fullyFormattedValue = `${prefix}${formattedValue}${suffix}`;\n const maxlength = mask.length;\n const minFormattedLength = getMinimumFormattedLength(mask, prefix, suffix);\n\n return {\n value: unformattedValue,\n formattedValue,\n fullyFormattedValue,\n prefix: prefix.trim() || suffix.trim(),\n formattingCharacterCount,\n maxlength,\n minFormattedLength,\n unformattedValue,\n };\n}\n\nconst optionalValidatingChars = ['?'];\nfunction isOptionalValidatingChar(character: string): boolean {\n return optionalValidatingChars.includes(character);\n}\n\nconst knownValidatingChars = ['#', '@', '*', ...optionalValidatingChars];\nfunction isKnownValidatingChar(character: string): boolean {\n return knownValidatingChars.includes(character);\n}\n\nfunction getStaticFormattingChars(mask: string): Set<string> {\n const knownChars = knownValidatingChars.join('|');\n const formattingChars = mask.replace(new RegExp(`[${knownChars}]`, 'g'), '').split('');\n return new Set(formattingChars);\n}\n\nfunction isStaticFormattingChar(character: string, formattingChars: Set<string>): boolean {\n return formattingChars.has(character);\n}\n\nfunction getValidatedChar(char: string, matcher: string) {\n switch (matcher) {\n case '#':\n char = char.replace(/[^\\d]/g, '');\n break;\n case '@':\n char = char.toUpperCase().replace(/[^A-Z]+/g, ''); // allows only upper case\n break;\n case '*':\n char = char.toUpperCase().replace(/[^\\dA-Z]+/g, '');\n break;\n case '?':\n char = char.replace(/[^\\d]/g, '');\n break;\n default:\n return char;\n }\n return char;\n}\n\nfunction generateMask(value: string, mask: string) {\n const maskArray = mask.split('');\n const formattingChars = getStaticFormattingChars(mask);\n let currentValueIndex: number = 0;\n let formattingCharacterCount: number = 0;\n let unformattedValue: string = '';\n\n const formattedValue = maskArray.reduce((acc: string, character: string) => {\n if (currentValueIndex >= value.length) {\n return acc;\n }\n\n if (isOptionalValidatingChar(character) && isStaticFormattingChar(value[currentValueIndex], formattingChars)) {\n return acc;\n }\n\n if (isKnownValidatingChar(character)) {\n // Step value index if formatting character pushed out of place by user input\n currentValueIndex = getNextNonFormattingCharIndex(value, currentValueIndex, formattingChars);\n\n if (currentValueIndex >= value.length) {\n return acc;\n }\n\n const validChar = getValidatedChar(value[currentValueIndex], character);\n acc += validChar;\n unformattedValue += validChar;\n currentValueIndex++;\n } else {\n // Static formatting characters added directly to formatted string\n acc += character;\n formattingCharacterCount++;\n\n if (character === value[currentValueIndex]) {\n // Continue to walk value if next value at this index matches formatting character\n currentValueIndex++;\n }\n }\n\n return acc;\n }, '');\n\n return {\n unformattedValue,\n formattedValue,\n formattingCharacterCount,\n };\n}\n\nfunction getNextNonFormattingCharIndex(value: string, currentValueIndex: number, formattingChars: Set<string>): number {\n if (isStaticFormattingChar(value[currentValueIndex], formattingChars)) {\n currentValueIndex++;\n return getNextNonFormattingCharIndex(value, currentValueIndex, formattingChars);\n }\n\n return currentValueIndex;\n}\n\nfunction getMinimumFormattedLength(mask: string, prefix: string, suffix: string): number {\n return (\n mask.replace(new RegExp(`[${optionalValidatingChars.join('|')}]`, 'g'), '').length +\n prefix.length +\n suffix.length\n );\n}\n","import formatNumber from './number';\nimport formatValue from './generic';\nimport { IFormatterValueObject, INumberInputFormatOptions } from '../q2-input-types';\n\n// decimal data source: http://www.iso.org/iso/home/standards/currency_codes.htm 09/Nov/2016\nexport const currencyFormats = {\n AED: {\n prefix: '',\n suffix: 'د.إ',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99د.إ'\n AFN: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n ALL: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n AMD: {\n prefix: 'դր.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'դր.9,999.99'\n ANG: {\n prefix: 'ƒ',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ƒ9,999.99'\n AOA: {\n prefix: 'Kz',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Kz9,999.99'\n ARS: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n AUD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n AWG: {\n prefix: 'ƒ',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ƒ9,999.99'\n AZN: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n BAM: {\n prefix: 'КМ',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'КМ9,999.99'\n BBD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n BDT: {\n prefix: '৳',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '৳9,999.99'\n BGN: {\n prefix: '৳',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '৳9,999.99'\n BHD: {\n prefix: '',\n suffix: 'ب.د',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999ب.د'\n BIF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n BMD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n BND: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n BOB: {\n prefix: 'Bs.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Bs.9,999.99'\n BRL: {\n prefix: 'R$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'R$9,999.99'\n BSD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n BTN: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n BWP: {\n prefix: 'P',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'P9,999.99'\n BYN: {\n prefix: 'Br',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Br9,999'\n BZD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n CAD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n CDF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999.99'\n CHF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999.99'\n CLF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 4,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9.999.9999'\n CLP: {\n prefix: '$',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999'\n CNY: {\n prefix: '¥',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¥9,999.99'\n COP: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n CRC: {\n prefix: '₡',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₡9,999.99'\n CUC: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n CUP: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n CVE: {\n prefix: '$',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999'\n CZK: {\n prefix: 'Kč',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Kč9,999.99'\n DJF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n DKK: {\n prefix: 'kr',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'kr9,999.99'\n DOP: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n DZD: {\n prefix: '',\n suffix: 'د.ج',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99د.ج'\n EEK: {\n prefix: 'KR',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'KR9,999.99'\n EGP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n ERN: {\n prefix: 'Nfk',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Nfk9,999.99'\n ETB: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n EUR: {\n prefix: '€',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '€9,999.99'\n FJD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n FKP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n GBP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n GEL: {\n prefix: 'ლ',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ლ9,999.99'\n GHS: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n GIP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n GMD: {\n prefix: 'D',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'D9,999.99'\n GNF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n GTQ: {\n prefix: 'Q',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Q9,999.99'\n GYD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n HKD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.9'\n HNL: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n HRK: {\n prefix: 'kn',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'kn9,999.99'\n HTG: {\n prefix: 'G',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'G9,999.99'\n HUF: {\n prefix: 'Ft',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Ft9,999.99'\n IDR: {\n prefix: 'Rs',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Rs9,999.99'\n ILS: {\n prefix: '₪',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₪9,999.99'\n INR: {\n prefix: '₨',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₨9,999.99'\n IQD: {\n prefix: '',\n suffix: 'ع.د',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999ع.د'\n IRR: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n ISK: {\n prefix: 'kr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'kr9,999'\n JMD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n JOD: {\n prefix: '',\n suffix: 'د.ا',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99د.ا'\n JPY: {\n prefix: '¥',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¥9,999'\n KES: {\n prefix: 'Sh',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Sh9,999.99'\n KGS: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n KHR: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n KMF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n KPW: {\n prefix: '₩',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₩9,999.99'\n KRW: {\n prefix: '₩',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₩9,999.99'\n KWD: {\n prefix: 'د.ك',\n suffix: '',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999د.ك'\n KYD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n KZT: {\n prefix: '〒',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '〒9,999.99'\n LAK: {\n prefix: '₭',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₭9,999.99'\n LBP: {\n prefix: '',\n suffix: 'ل.ل',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ل.ل9,999.99'\n LKR: {\n prefix: 'Rs',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Rs9,999.99'\n LRD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n LSL: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n LTL: {\n prefix: 'Lt',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Lt9,999.99'\n LVL: {\n prefix: 'Ls',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Ls9,999.99'\n LYD: {\n prefix: '',\n suffix: 'ل.د',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999ل.د'\n MAD: {\n prefix: '',\n suffix: 'د.م.',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99د.م.'\n MDL: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n MGA: {\n prefix: '¤',\n suffix: '',\n decimals: 1,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.9'\n MKD: {\n prefix: 'ден',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ден9,999.99'\n MMK: {\n prefix: 'K',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'K9,999.99'\n MNT: {\n prefix: '₮',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₮9,999.99'\n MOP: {\n prefix: 'P',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'P9,999.99'\n MRU: {\n prefix: 'UM',\n suffix: '',\n decimals: 1,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'UM9,999.9'\n MUR: {\n prefix: '₨',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₨9,999.99'\n MVR: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n MWK: {\n prefix: 'MK',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'MK9,999.99'\n MXN: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n MYR: {\n prefix: 'RM',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'RM9,999.99'\n MZN: {\n prefix: 'MTn',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'MTn9,999.99'\n NAD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n NGN: {\n prefix: '₦',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₦9,999.99'\n NIO: {\n prefix: 'C$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'C$9,999.99'\n NOK: {\n prefix: 'kr',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'kr9,999.99'\n NPR: {\n prefix: '₨',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₨9,999.99'\n NZD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n OMR: {\n prefix: '',\n suffix: 'ر.ع.',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999ر.ع.'\n PAB: {\n prefix: 'B/.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'B/.9,999.99'\n PEN: {\n prefix: 'S/.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'S/.9,999.99'\n PGK: {\n prefix: 'K',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'K9,999.99'\n PHP: {\n prefix: 'p',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'p9,999.99'\n PKR: {\n prefix: '₨',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₨9,999.99'\n PLN: {\n prefix: 'zł',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'zł9,999.99'\n PYG: {\n prefix: '¤',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999'\n QAR: {\n prefix: '',\n suffix: 'ر.ق',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99ر.ق'\n RON: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n RSD: {\n prefix: 'дин.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'дин.9,999.99'\n RUB: {\n prefix: 'руб.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'руб.9,999.99'\n RWF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n SAR: {\n prefix: '',\n suffix: 'ر.س',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99ر.س'\n SBD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n SCR: {\n prefix: '₨',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₨9,999.99'\n SDG: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n SEK: {\n prefix: 'kr',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'kr9,999.99'\n SGD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n SHP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n SKK: {\n prefix: 'Sk',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Sk9,999.99'\n SLL: {\n prefix: 'Le',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Le9,999.99'\n SOS: {\n prefix: 'Sh',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Sh9,999.99'\n SRD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n STN: {\n prefix: 'Db',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Db9,999.99'\n SVC: {\n prefix: '₡',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₡9,999.99'\n SYP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n SZL: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n THB: {\n prefix: '฿',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '฿9,999.99'\n TJS: {\n prefix: 'ЅМ',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ЅМ9,999.99'\n TMM: {\n prefix: 'm',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'm9,999.99'\n TND: {\n prefix: '',\n suffix: 'د.ت',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999د.ت'\n TOP: {\n prefix: 'T$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'T$9,999.99'\n TRY: {\n prefix: 'YTL',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'YTL9,999.99'\n TTD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n TWD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n TZS: {\n prefix: 'Sh',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Sh9,999.99'\n UAH: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n UGX: {\n prefix: 'Sh',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Sh9,999'\n USD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n UYU: {\n prefix: '$',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999'\n UZS: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n VEF: {\n prefix: 'Bs F',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Bs F9,999.99'\n VND: {\n prefix: '₫',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₫9,999'\n VUV: {\n prefix: 'Vt',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Vt9,999'\n WST: {\n prefix: 'T',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'T9,999.99'\n XAF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n XCD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n XOF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n XPF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n YER: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n ZAR: {\n prefix: 'R',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'R9,999.99'\n ZMW: {\n prefix: 'ZK',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ZK9,999.99'\n ZWD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n};\n\nexport default function formatCurrency(\n value: string,\n currencyCode: string = 'USD',\n explicit: boolean = false\n): IFormatterValueObject {\n let processedCurrencyCode = currencyCode || '';\n let allowDecimal = true;\n\n if (processedCurrencyCode.includes('-integer')) {\n processedCurrencyCode = processedCurrencyCode.split('-integer')[0];\n allowDecimal = false;\n }\n\n const currencyFormat = currencyFormats[processedCurrencyCode];\n\n if (!currencyFormat) {\n return formatValue(value);\n }\n\n const options: INumberInputFormatOptions = {\n ...currencyFormat,\n allowDecimal: allowDecimal && currencyFormat.decimals > 0,\n allowNegative: false,\n };\n\n return formatNumber(value, options, explicit);\n}\n","import { IFormatterValueObject } from '../q2-input-types';\nimport formatValue from './generic';\n\nexport const phoneNumberFormats = {\n AF: {\n mask: '(##) #######',\n prefix: '+93 ',\n },\n AL: {\n mask: '#######',\n prefix: '+355 ',\n },\n DZ: {\n mask: '(##) ###-###',\n prefix: '+213 ',\n },\n // AS\n AD: {\n mask: '(#) #####',\n prefix: '+376 ',\n },\n AO: {\n mask: '#########',\n prefix: '+244 ',\n },\n AI: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n AG: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n AR: {\n mask: '##########',\n prefix: '+54 ',\n },\n AM: {\n mask: '########',\n prefix: '+375 ',\n },\n AQ: {\n mask: '##-####',\n prefix: '+672 ',\n },\n AW: {\n mask: '###-####',\n prefix: '+297 ',\n },\n AU: {\n mask: '(##) ####-####',\n prefix: '+61 ',\n },\n /* AT: {\n mask:'####?????????',\n prefix: ''\n }, */\n AT: {\n mask: '#############',\n prefix: '+43 ',\n },\n /* AZ: {\n mask:'########?',\n prefix: ''\n }, */\n AZ: {\n mask: '#########',\n prefix: '+994 ',\n },\n BS: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n BH: {\n mask: '####-####',\n prefix: '+973 ',\n },\n /* BD: {\n mask:'#######??',\n prefix: ''\n }, */\n BD: {\n mask: '#########',\n prefix: '+880 ',\n },\n BB: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n BY: {\n mask: '#########',\n prefix: '+375 ',\n },\n BE: {\n mask: '########??',\n prefix: '+32 ',\n },\n BZ: {\n mask: '#######',\n prefix: '+501 ',\n },\n BJ: {\n mask: '(##) ###-###',\n prefix: '+229 ',\n },\n BM: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n BT: {\n mask: '(#) ###-###',\n prefix: '+975 ',\n },\n BO: {\n mask: '(#) ###-####',\n prefix: '+591 ',\n },\n BA: {\n mask: '(##) ##-##-##',\n prefix: '+387 ',\n },\n /* BW: {\n mask:'#######?',\n prefix: ''\n }, */\n BW: {\n mask: '########',\n prefix: '+267 ',\n },\n BR: {\n mask: '(##) ####-####',\n prefix: '+55 ',\n },\n BN: {\n mask: '###-####',\n prefix: '+673 ',\n },\n BG: {\n mask: '#######?',\n prefix: '+359 ',\n },\n BF: {\n mask: '##-##-##-##',\n prefix: '+226 ',\n },\n BI: {\n mask: '####-####',\n prefix: '+257 ',\n },\n KH: {\n mask: '(##) ######',\n prefix: '+855 ',\n },\n CM: {\n mask: '####-####',\n prefix: '+237 ',\n },\n CA: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n CV: {\n mask: '###-####',\n prefix: '+238 ',\n },\n KY: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n CF: {\n mask: '###-###',\n prefix: '+236 ',\n },\n TD: {\n mask: '###-##-##',\n prefix: '+235 ',\n },\n /* CL: {\n mask:'########?',\n prefix: ''\n }, */\n CL: {\n mask: '#########',\n prefix: '+56 ',\n },\n /* CN: {\n mask:'########???',\n prefix: ''\n }, */\n CN: {\n mask: '###########',\n prefix: '+86 ',\n },\n /* CO: {\n mask:'########??',\n prefix: ''\n }, */\n CO: {\n mask: '##########',\n prefix: '57 ',\n },\n KM: {\n mask: '###-####',\n prefix: '+269 ',\n },\n CD: {\n mask: '###-####',\n prefix: '+243 ',\n },\n CG: {\n mask: '###-####',\n prefix: '+242 ',\n },\n // CK\n CR: {\n mask: '####-####',\n prefix: '+506 ',\n },\n CI: {\n mask: '####-####',\n prefix: '+225 ',\n },\n HR: {\n mask: '########?',\n prefix: '+385 ',\n },\n /* CU: {\n mask:'#####?ID:?????',\n prefix: ''\n }, */\n CU: {\n mask: '###########',\n prefix: '+53 ',\n },\n CY: {\n mask: '####-####',\n prefix: '+357 ',\n },\n CZ: {\n mask: '#########',\n prefix: '+420 ',\n },\n DK: {\n mask: '####-####',\n prefix: '+45 ',\n },\n DJ: {\n mask: '##-##-##-##',\n prefix: '+253 ',\n },\n DM: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n DO: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n TL: {\n mask: '###-####',\n prefix: '+670 ',\n },\n EC: {\n mask: '(##) ###-####',\n prefix: '+593 ',\n },\n /* EG: {\n mask:'########??',\n prefix: ''\n }, */\n EG: {\n mask: '##########',\n prefix: '+20 ',\n },\n SV: {\n mask: '####-####',\n prefix: '+503 ',\n },\n GQ: {\n mask: '##-####',\n prefix: '+240 ',\n },\n // ER:\n EE: {\n mask: '#######?',\n prefix: '+372 ',\n },\n ET: {\n mask: '(##) ###-####',\n prefix: '+251 ',\n },\n FK: {\n mask: '#####',\n prefix: '+500 ',\n },\n FO: {\n mask: '######',\n prefix: '+298 ',\n },\n FJ: {\n mask: '###-####',\n prefix: '+679 ',\n },\n /* FI: {\n mask:'#####???????',\n prefix: ''\n }, */\n FI: {\n mask: '############',\n prefix: '+358 ',\n },\n FR: {\n mask: '#########',\n prefix: '+33 ',\n },\n /* GF: {\n mask:'#########?',\n prefix: ''\n }, */\n GF: {\n mask: '##########',\n prefix: '+594 ',\n },\n PF: {\n mask: '######',\n prefix: '+689 ',\n },\n GA: {\n mask: '######?',\n prefix: '+241 ',\n },\n GM: {\n mask: '###-####',\n prefix: '+220 ',\n },\n GE: {\n mask: '########',\n prefix: '+995 ',\n },\n /* DE: {\n mask:'######?????',\n prefix: ''\n }, */\n DE: {\n mask: '###########',\n prefix: '+49 ',\n },\n /* GH: {\n mask:'########?',\n prefix: ''\n }, */\n GH: {\n mask: '#########',\n prefix: '+233 ',\n },\n GI: {\n mask: '####-####',\n prefix: '+350 ',\n },\n GR: {\n mask: '##########',\n prefix: '+30 ',\n },\n GL: {\n mask: '###-###',\n prefix: '+299 ',\n },\n GD: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n GP: {\n mask: '##########',\n prefix: '+590 ',\n },\n GU: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n GT: {\n mask: '####-####',\n prefix: '+502 ',\n },\n GN: {\n mask: '####-####',\n prefix: '+224 ',\n },\n GW: {\n mask: '###-####',\n prefix: '+245 ',\n },\n GY: {\n mask: '(###) ####',\n prefix: '+592 ',\n },\n HK: {\n mask: '####-####',\n prefix: '+852 ',\n },\n HN: {\n mask: '########',\n prefix: '+504 ',\n },\n HT: {\n mask: '####-####',\n prefix: '+509 ',\n },\n HU: {\n mask: '########??',\n prefix: '+36 ',\n },\n /* IS: {\n mask:'#######??',\n prefix: ''\n }, */\n IS: {\n mask: '#########',\n prefix: '+354 ',\n },\n IN: {\n mask: '##########',\n prefix: '+91 ',\n },\n /* ID: {\n mask:'#######???',\n prefix: ''\n }, */\n ID: {\n mask: '#######??????', // allows 7 ~ 13 digits\n prefix: '+62 ',\n },\n IR: {\n mask: '##########',\n prefix: '+98 ',\n },\n /* IQ: {\n mask:'########??',\n prefix: ''\n }, */\n IQ: {\n mask: '##########',\n prefix: '+964 ',\n },\n /* IE: {\n mask:'#######??',\n prefix: ''\n }, */\n IE: {\n mask: '#########',\n prefix: '+353 ',\n },\n /* IL: {\n mask:'########?',\n prefix: ''\n }, */\n IL: {\n mask: '#########',\n prefix: '+972 ',\n },\n /* IT: {\n mask:'######????',\n prefix: ''\n }, */\n IT: {\n mask: '##########',\n prefix: '+39 ',\n },\n JM: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n JP: {\n mask: '#########??',\n prefix: '+81 ',\n },\n /* JO: {\n mask:'#######??',\n prefix: ''\n }, */\n JO: {\n mask: '#########',\n prefix: '+962 ',\n },\n KZ: {\n mask: '(###) ####-###',\n prefix: '+7 ',\n },\n /* KE: {\n mask:'######????',\n prefix: ''\n }, */\n KE: {\n mask: '##########',\n prefix: '+254 ',\n },\n KI: {\n mask: '##-###',\n prefix: '+686 ',\n },\n // kp\n /* KR: {\n mask:'####??????',\n prefix: ''\n }, */\n KR: {\n mask: '##########',\n prefix: '+82 ',\n },\n KW: {\n mask: '####-####',\n prefix: '+965 ',\n },\n KG: {\n mask: '#########',\n prefix: '+996 ',\n },\n LA: {\n mask: '########?',\n prefix: '+856 ',\n },\n LV: {\n mask: '####-####',\n prefix: '+371 ',\n },\n LB: {\n mask: '#######?',\n prefix: '+961 ',\n },\n LS: {\n mask: '##-###-###',\n prefix: '+266 ',\n },\n // LR\n /* LY: {\n mask:'########?',\n prefix: ''\n }, */\n LY: {\n mask: '########?',\n prefix: '+218 ',\n },\n LI: {\n mask: '###-####',\n prefix: '+423 ',\n },\n LT: {\n mask: '########',\n prefix: '+370 ',\n },\n /* LU: {\n mask:'#####??????',\n prefix: '+352 '\n }, */\n LU: {\n mask: '###########',\n prefix: '+352 ',\n },\n MO: {\n mask: '####-####',\n prefix: '+853 ',\n },\n MK: {\n mask: '########',\n prefix: '+389 ',\n },\n MG: {\n mask: '##-##-###-##',\n prefix: '+261 ',\n },\n /* MW: {\n mask:'#######??',\n prefix: '+265 '\n }, */\n MW: {\n mask: '#########',\n prefix: '+265 ',\n },\n /* MY: {\n mask:'#######???',\n prefix: '+60 '\n }, */\n MY: {\n mask: '##########',\n prefix: '+60 ',\n },\n MV: {\n mask: '###-####',\n prefix: '+960 ',\n },\n ML: {\n mask: '####-####',\n prefix: '+223 ',\n },\n MT: {\n mask: '##-##-##-##',\n prefix: '+356 ',\n },\n MH: {\n mask: '###-####',\n prefix: '+692 ',\n },\n MQ: {\n mask: '###-######',\n prefix: '+596 ',\n },\n // MR\n MU: {\n mask: '###-####',\n prefix: '+230 ',\n },\n // YT\n MX: {\n mask: '(###) ###-####',\n prefix: '+52 ',\n },\n // FM\n MD: {\n mask: '########',\n prefix: '+373 ',\n },\n MC: {\n mask: '####-####',\n prefix: '+377 ',\n },\n /* MN: {\n mask:'######?????',\n prefix: '+976 '\n }, */\n MN: {\n mask: '###########',\n prefix: '+976 ',\n },\n MS: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n MA: {\n mask: '#########?', // allows 9 ~ 10 digits\n prefix: '+212 ',\n },\n /* MZ: {\n mask:'########?',\n prefix: '+258 '\n }, */\n MZ: {\n mask: '#########',\n prefix: '+258 ',\n },\n /* MM: {\n mask:'#######?',\n prefix: '+95 '\n }, */\n MM: {\n mask: '########',\n prefix: '+95 ',\n },\n /* NA: {\n mask:'######????',\n prefix: '+264 '\n }, */\n NA: {\n mask: '##########',\n prefix: '+264 ',\n },\n // NR\n /* NP: {\n mask:'########??',\n prefix: '+977 '\n }, */\n NP: {\n mask: '##########',\n prefix: '+977 ',\n },\n NL: {\n mask: '#########',\n prefix: '+31 ',\n },\n /* AN: {\n mask:'#######?',\n prefix: '+599 '\n }, */\n AN: {\n mask: '########',\n prefix: '+599 ',\n },\n NC: {\n mask: '###-###',\n prefix: '+687 ',\n },\n /* NZ: {\n mask:'########??',\n prefix: '+64 '\n }, */\n NZ: {\n mask: '##########',\n prefix: '+64 ',\n },\n NI: {\n mask: '####-####',\n prefix: '+505 ',\n },\n NE: {\n mask: '##-###-###',\n prefix: '+227 ',\n },\n /* NG: {\n mask:'########??',\n prefix: '+234 '\n }, */\n NG: {\n mask: '##########',\n prefix: '+234 ',\n },\n // NU\n MP: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n NO: {\n mask: '####-####',\n prefix: '+47 ',\n },\n OM: {\n mask: '####-####',\n prefix: '+968 ',\n },\n /* PK: {\n mask:'#########?',\n prefix: '+92 '\n }, */\n PK: {\n mask: '##########',\n prefix: '+92 ',\n },\n PW: {\n mask: '###-####',\n prefix: '+680 ',\n },\n /* PA: {\n mask:'#######?',\n prefix: '+507 '\n }, */\n PA: {\n mask: '########',\n prefix: '+507 ',\n },\n /* PG: {\n mask:'#######?',\n prefix: '+675 '\n }, */\n PG: {\n mask: '########',\n prefix: '+675 ',\n },\n // PY\n /* PE: {\n mask:'#######????',\n prefix: '+51 '\n }, */\n PE: {\n mask: '###########',\n prefix: '+51 ',\n },\n /* PH: {\n mask:'########??',\n prefix: '+63 '\n }, */\n PH: {\n mask: '##########',\n prefix: '+63 ',\n },\n PL: {\n mask: '#########',\n prefix: '+48 ',\n },\n PT: {\n mask: '#-####-####',\n prefix: '+351 ',\n },\n PR: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n QA: {\n mask: '###-####',\n prefix: '+974 ',\n },\n RE: {\n mask: '###-###-###',\n prefix: '+262 ',\n },\n RO: {\n mask: '#########',\n prefix: '+40 ',\n },\n RU: {\n mask: '##########',\n prefix: '+7 ',\n },\n RW: {\n mask: '###-###-###',\n prefix: '+250 ',\n },\n SH: {\n mask: '#-###',\n prefix: '+290 ',\n },\n // PM\n KN: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n LC: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n VC: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n // WS\n // SM\n ST: {\n mask: '##-####',\n prefix: '+239 ',\n },\n /* SA: {\n mask:'########?',\n prefix: '+966 '\n }, */\n SA: {\n mask: '#########',\n prefix: '+966 ',\n },\n SN: {\n mask: '##-###-####',\n prefix: '+221 ',\n },\n SC: {\n mask: '###-###',\n prefix: '+248 ',\n },\n SL: {\n mask: '(##) ###-###',\n prefix: '+232 ',\n },\n SG: {\n mask: '####-####',\n prefix: '+65 ',\n },\n SK: {\n mask: '#########',\n prefix: '+421 ',\n },\n SI: {\n mask: '########',\n prefix: '+386 ',\n },\n SB: {\n mask: '##-###',\n prefix: '+677 ',\n },\n // SO\n ZA: {\n mask: '(##) ###-####',\n prefix: '+27 ',\n },\n ES: {\n mask: '###-###-###',\n prefix: '+34 ',\n },\n LK: {\n mask: '(##) ###-####',\n prefix: '+94 ',\n },\n SD: {\n mask: '##-###-####',\n prefix: '+249 ',\n },\n SR: {\n mask: '######?',\n prefix: '+597 ',\n },\n SZ: {\n mask: '###-####',\n prefix: '+268 ',\n },\n /* SE: {\n mask:'######?????',\n prefix: '+46 '\n }, */\n SE: {\n mask: '###########',\n prefix: '+46 ',\n },\n CH: {\n mask: '(##) ###-####',\n prefix: '+41 ',\n },\n /* SY: {\n mask:'########?',\n prefix: '+963 '\n }, */\n SY: {\n mask: '#########',\n prefix: '+963 ',\n },\n TJ: {\n mask: '#########',\n prefix: '+992 ',\n },\n TZ: {\n mask: '#########',\n prefix: '+255 ',\n },\n /* TH: {\n mask:'########?',\n prefix: '+66 '\n }, */\n TH: {\n mask: '#########',\n prefix: '+66 ',\n },\n TG: {\n mask: '###-####',\n prefix: '+228 ',\n },\n // TK\n // TO\n TT: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n TN: {\n mask: '##-###-###',\n prefix: '+216 ',\n },\n TR: {\n mask: '(###) ###-####',\n prefix: '+90 ',\n },\n TM: {\n mask: '########',\n prefix: '+993 ',\n },\n TC: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n // TV\n UG: {\n mask: '#########',\n prefix: '+256 ',\n },\n UA: {\n mask: '(##) ###-####',\n prefix: '+380 ',\n },\n /* AE: {\n mask:'########?',\n prefix: '+971 '\n }, */\n AE: {\n mask: '#########',\n prefix: '+971 ',\n },\n /* GB: {\n mask:'##########???',\n prefix: '+44 '\n }, */\n GB: {\n mask: '#########????',\n prefix: '+44 ',\n },\n UY: {\n mask: '########?',\n prefix: '+598 ',\n },\n UZ: {\n mask: '(##) ###-####',\n prefix: '+998 ',\n },\n // VU\n // VA\n VE: {\n mask: '(###) ###-####',\n prefix: '+58 ',\n },\n VN: {\n mask: '#######????',\n prefix: '+84 ',\n },\n VG: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n VI: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n // WF\n /* YE: {\n mask:'#######??',\n prefix: '+967 '\n }, */\n YE: {\n mask: '#########',\n prefix: '+967 ',\n },\n // YU\n ZM: {\n mask: '#########',\n prefix: '+260 ',\n },\n /* ZW: {\n mask:'####?????',\n prefix: '+263 '\n }, */\n ZW: {\n mask: '#########',\n prefix: '+263 ',\n },\n AC: {\n mask: '####',\n prefix: '+247 ',\n },\n ME: {\n mask: '(##) ###-###?',\n prefix: '+382 ',\n },\n /* PS: {\n mask:'########?',\n prefix: '+970 '\n }, */\n PS: {\n mask: '#########',\n prefix: '+970 ',\n },\n /* RS: {\n mask:'#######??',\n prefix: '+381 '\n }, */\n RS: {\n mask: '#########',\n prefix: '+381 ',\n },\n /* TW: {\n mask:'########?',\n prefix: '+886 '\n }, */\n TW: {\n mask: '#########',\n prefix: '+886 ',\n },\n CW: {\n mask: '#-###-####',\n prefix: '+599 ',\n },\n US: {\n mask: '(###) ###-####',\n prefix: '',\n },\n};\n\nexport default function formatPhoneNumber(value: string, isoCode: string = 'US'): IFormatterValueObject {\n const { mask, prefix } = phoneNumberFormats[isoCode] || phoneNumberFormats.US;\n\n const options = {\n prefix,\n };\n\n const val = value || '';\n // Brazil need edge case handle, mobile: (xx) xxxxx-xxxx, land phone: (xx) xxxx-xxxx\n if (isoCode === 'BR' && val.replace(/[^0-9]/g, '').length === 11) {\n return formatValue(val, '(##) #####-####', options);\n } else {\n return formatValue(val, mask, options);\n }\n}\n","import formatValue from './generic';\n\nexport default function formatSSN(value: string) {\n return formatValue(value, '###-##-####');\n}\n","import formatValue from './generic';\n\nexport default function formatTIN(value: string) {\n return formatValue(value, '##-#######');\n}\n","import formatValue from './generic';\n\nexport default function formatAlphanumeric(value: string) {\n const val = (value || '').replace(/[^\\da-zA-Z]/g, '');\n return formatValue(val);\n}\n","import formatValue from './generic';\n\nexport default function formatAlpha(value: string, modifier?: string) {\n let val = value || '';\n\n if (modifier === 'spaced') {\n val = val.replace(/[^a-zA-Z ]/g, '');\n } else {\n val = val.replace(/[^a-zA-Z]/g, '');\n }\n\n return formatValue(val);\n}\n","import formatNumber from './number';\nimport formatValue from './generic';\nimport { INumberInputFormatOptions } from '../q2-input-types';\n\nfunction getNumberFormat(formatOptions: string): INumberInputFormatOptions | undefined {\n const numberFormat: INumberInputFormatOptions = {\n prefix: '',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: '',\n allowDecimal: false,\n allowNegative: true,\n };\n const formatParts = formatOptions.split('-');\n\n // handle deprecated formats\n if (formatParts[0] === 'delimited') {\n // `delimited` - to be replaced by `integer-delimited`\n numberFormat.thousandsSeparator = ',';\n } else if (formatParts[0].match(/^[0-9]+dec$/)) {\n // `Ndec` - to be replaced by `Ndecimal`\n numberFormat.decimals = Number(formatParts[0].replace('dec', ''));\n numberFormat.allowDecimal = true;\n numberFormat.thousandsSeparator = ',';\n } else {\n // determine number type\n if (formatParts[0].includes('decimal')) {\n numberFormat.decimals = Number(formatParts[0].replace('decimal', ''));\n numberFormat.allowDecimal = true;\n } else if (formatParts[0] !== 'integer') {\n // Ignore any formats that don't start with Ndecimal or integer\n return;\n }\n\n // determine if negative numbers are allowed\n if (formatParts.includes('positive')) {\n numberFormat.allowNegative = false;\n }\n\n // determine if number is delimited\n if (formatParts.includes('delimited')) {\n numberFormat.thousandsSeparator = ',';\n }\n }\n\n return numberFormat;\n}\n\nfunction formatNumeric(value: string = '', modifier: string = '', explicit: boolean = false) {\n const numberFormat = getNumberFormat(modifier);\n\n if (!numberFormat) {\n const val = (value || '').replace(/[^\\d.,-]/g, '');\n return formatValue(val);\n }\n\n return formatNumber(value, numberFormat, explicit);\n}\n\nexport function formatPercentage(value: string = '', modifier: string = '', explicit: boolean = false) {\n const numberFormat = getNumberFormat(modifier);\n\n if (!numberFormat) {\n const val = (value || '').replace(/[^\\d.,-]/g, '');\n return formatValue(val, undefined, { suffix: '%' });\n }\n\n numberFormat.suffix = '%';\n\n return formatNumber(value, numberFormat, explicit);\n}\n\nexport default formatNumeric;\n","import formatValue from './generic';\nimport formatAlphanumeric from './alphanumeric';\n\nconst postalCodeFormats = {\n AF: '####',\n AL: '####',\n DZ: '#####',\n AC: 'ASCN 1ZZ',\n AD: 'AD###', // pre\n AR: '####',\n 'AR+': '@####@@@',\n AI: 'AI-2640',\n AM: '####',\n AS: '#####',\n 'AS+4': '#####-####',\n AU: '####',\n AT: '####',\n AZ: 'AZ ####', // pre\n BH: '###?',\n BD: '####',\n BB: 'BB#####', // pre\n BY: '######',\n BE: '####',\n BM: '@@ **',\n BT: '#####',\n BA: '######',\n BR: '#####',\n 'BR+3': '#####-###',\n VG: 'VG####', // pre\n BN: '@@####',\n BG: '####',\n KH: '#####',\n KY: 'KY#-####', // pre\n CA: '@#@ #@#',\n CL: '###-####',\n CN: '######',\n CX: '####',\n CC: '####',\n CO: '######',\n CR: '#####',\n 'CR+4': '#####-####',\n CV: '####',\n HR: '#####',\n CU: '#####',\n CY: '####',\n CZ: '### ##',\n DK: '####',\n DO: '#####',\n EC: '######',\n SV: '####',\n EG: '#####',\n EE: '#####',\n ET: '####',\n FK: 'FIQQ 1ZZ',\n FO: '###',\n FI: '#####',\n FR: '#####',\n GF: '973##', // pre?\n PF: '987##', // pre?\n GI: 'GX11 1AA',\n GE: '####',\n DE: '#####',\n GR: '### ##',\n GL: '####',\n GP: '971##', // pre?\n GU: '#####',\n 'GU+4': '#####-####',\n GT: '#####',\n GG: 'GY#? #@@',\n GN: '###',\n GS: 'SIQQ 1ZZ',\n GW: '####',\n HT: '####',\n HN: '@@####',\n 'HN-': '#####',\n HU: '####',\n IS: '###',\n IN: '### ###',\n ID: '#####',\n IE: '*** ****',\n IR: '##########',\n IQ: '#####',\n IM: 'IM#? #@@', // pre\n IL: '#######',\n IT: '#####',\n JM: '##',\n JP: '###-####',\n JE: 'JE#? #@@', // pre\n JO: '#####',\n KZ: '######',\n KE: '#####',\n KR: '#####',\n KN: 'KN####',\n XK: '#####',\n KW: '#####',\n KG: '######',\n LA: '#####',\n LV: 'LV-####', // pre\n LB: '####? ????', // also 00000\n LS: '###',\n LR: '####',\n LI: '####',\n LT: '#####', // pre-\n LU: '####',\n MK: '####',\n MG: '###',\n MY: '#####',\n MV: '#####',\n MT: '@@@ ####',\n MH: '#####',\n 'MH+4': '#####-####',\n MU: '#####',\n MQ: '972##', // pre?\n MW: '######',\n YT: '976##', // pre?\n MX: '#####',\n FM: '#####',\n 'FM+4': '#####-####',\n MD: '####', // pre\n MC: '980##', // pre?\n MN: '#####',\n ME: '#####',\n MA: '#####',\n MZ: '####',\n MM: '#####',\n NA: '#####',\n NP: '#####',\n NC: '988##', // pre?\n NZ: '####',\n NI: '#####',\n NE: '####',\n NG: '######',\n NF: '####',\n MP: '#####',\n NO: '####',\n OM: '###',\n PK: '#####',\n PW: '#####',\n 'PW+4': '#####-####',\n PS: '###',\n PA: '####',\n PG: '###',\n PY: '####',\n PE: '#####',\n 'PE+': '####', // pre\n PH: '####',\n PL: '##-###',\n PT: '####',\n 'PT+3': '####-###',\n PR: '#####',\n 'PR+4': '#####-####',\n RE: '974##', // pre?\n PM: '975##',\n PN: 'PCRN 1ZZ',\n RO: '######',\n RU: '######',\n LC: 'LC## ###', // pre\n VC: '####', // pre\n WS: '####', // pre\n SM: '4879#', // pre?\n SA: '#####',\n 'SA+4': '#####-####',\n SN: '#####',\n RS: '#####',\n SG: '######',\n SH: '@@@@ 1ZZ',\n SK: '### ##',\n SI: '####', // pre?\n SO: '@@ #####',\n ZA: '####',\n ES: '#####',\n LK: '#####',\n SD: '#####',\n SZ: '@###',\n SE: '### ##',\n CH: '####',\n SJ: '####',\n TW: '###',\n 'TW+2': '###-##?',\n TJ: '######',\n TZ: '#####',\n TH: '#####',\n TT: '######',\n TN: '####',\n TR: '#####',\n TM: '######',\n UA: '#####',\n UY: '#####',\n VI: '#####',\n 'VI+4': '#####-####',\n UZ: '######',\n VE: '####',\n 'VE-': '####-@',\n VN: '#####?',\n YU: '#####',\n WF: '986##', // pre?\n ZM: '#####',\n US: '#####',\n 'US+4': '#####-####',\n};\nexport default function formatPostalCode(value: string, modifier: string = 'US') {\n const mask = postalCodeFormats[modifier];\n\n if (!mask) {\n return formatAlphanumeric(value);\n }\n\n return formatValue(value, mask);\n}\n","import formatValue from './generic';\n\nconst dateFormats = {\n 'MM/DD/YYYY': '##/##/####',\n 'M/D/YYYY': '#?/#?/####',\n 'MM/DD/YY': '##/##/##',\n 'M/D/YY': '#?/#?/##',\n 'MM/YY': '##/##',\n 'M/YY': '#?/##',\n 'DD/MM/YYYY': '##/##/####',\n 'D/M/YYYY': '#?/#?/####',\n 'DD/MM/YY': '##/##/##',\n 'D/M/YY': '#?/#?/##',\n 'MM-DD-YYYY': '##-##-####',\n 'M-D-YYYY': '#?-#?-####',\n 'MM-DD-YY': '##-##-##',\n 'M-D-YY': '#?-#?-##',\n 'MM-YY': '##-##',\n 'M-YY': '#?-##',\n 'DD-MM-YYYY': '##-##-####',\n 'D-M-YYYY': '#?-#?-####',\n 'DD-MM-YY': '##-##-##',\n 'D-M-YY': '#?-#?-##',\n};\n\nexport default function formatDate(value: string, format: string = 'MM/DD/YYYY') {\n const mask = dateFormats[format?.toUpperCase()] || dateFormats['MM/DD/YYYY'];\n\n const formattedValueObject = formatValue(value, mask);\n\n return {\n ...formattedValueObject,\n value: formattedValueObject.formattedValue,\n };\n}\n","import formatValue from './generic';\nimport { IFormatterValueObject } from '../q2-input-types';\n\ninterface FormattedCreditCardObject extends IFormatterValueObject {\n type: string;\n leftIcon: string;\n leftIconMuted: boolean;\n}\n\ntype Formatter = (value: string) => FormattedCreditCardObject;\n\nfunction format(value: string): FormattedCreditCardObject {\n // have a initial generic mask which then converts to specific mask\n const detectedType = formatCreditCard.detectCreditCardTypeFromValue(value);\n const formattedValueObject = creditCardFormatters[detectedType](value);\n\n if (value.length < 2 && detectedType === 'unknown') {\n formattedValueObject.leftIcon = 'card';\n }\n return formattedValueObject;\n}\n\nconst unknownFormatter: Formatter = function unknownFn(value) {\n const valueObject = formatValue(value, '#### #### #### ####');\n\n return {\n ...valueObject,\n type: 'unknown',\n leftIcon: 'card-unknown',\n leftIconMuted: value.length < 16,\n };\n};\n\nconst amexFormatter: Formatter = function amexFn(value) {\n const valueObject = formatValue(value, '#### ###### #####');\n\n return {\n ...valueObject,\n type: 'amex',\n leftIcon: 'card-amex-color',\n leftIconMuted: value.length < 15,\n };\n};\n\nconst discoverFormatter: Formatter = function discoverFn(value) {\n const valueObject = formatValue(value, '#### #### #### ####');\n\n return {\n ...valueObject,\n type: 'discover',\n leftIcon: 'card-discover-color',\n leftIconMuted: value.length < 16,\n };\n};\n\nconst masterCardFormatter: Formatter = function masterCardFn(value) {\n const valueObject = formatValue(value, '#### #### #### ####');\n\n return {\n ...valueObject,\n type: 'masterCard',\n leftIcon: 'card-mastercard-color',\n leftIconMuted: value.length < 16,\n };\n};\n\nconst visaFormatter: Formatter = function visaFn(value) {\n const valueObject = formatValue(value, '#### #### #### ####');\n\n return {\n ...valueObject,\n type: 'visa',\n leftIcon: 'card-visa-color',\n leftIconMuted: value.length < 16,\n };\n};\n\nconst dinersClubInternationalFormatter: Formatter = function dinersClub(value) {\n const valueObject = formatValue(value, '#### ###### ####');\n\n return {\n ...valueObject,\n type: 'dinersClub',\n leftIcon: 'card-dinersclub-color',\n leftIconMuted: value.length < 14,\n };\n};\n\nconst creditCardFormatters = {\n discover: discoverFormatter,\n amex: amexFormatter,\n masterCard: masterCardFormatter,\n visa: visaFormatter,\n dinersClub: dinersClubInternationalFormatter,\n unknown: unknownFormatter,\n};\n\n/* tslint:disable:cyclomatic-complexity */\nfunction detectCreditCardTypeFromValue(value: string): string {\n // use value and some algorithm from the internet to detect and return card type based on string\n // return string 'unknown' if algorithm cannot detect or returns a type that is not one of our 5 supported types\n const firstInt = parseInt(value.charAt(0));\n const secondInt = parseInt(value.charAt(1));\n\n switch (firstInt) {\n case 2:\n if (secondInt > 1 && secondInt < 8) {\n if (value.length >= 4) {\n const firstfour = parseInt(value.substr(0, 4));\n if (firstfour >= 2221 && firstfour < 2721) {\n return 'masterCard';\n }\n } else {\n return 'masterCard';\n }\n }\n break;\n case 3:\n if (secondInt === 4 || secondInt === 7) {\n return 'amex';\n }\n if (secondInt === 0) {\n if (value.length > 2) {\n const thirdInt = parseInt(value.charAt(2));\n if (thirdInt < 6 || thirdInt === 9) {\n return 'dinersClub';\n }\n } else {\n return 'dinersClub';\n }\n }\n if (secondInt === 6 || secondInt === 8 || secondInt === 9) {\n return 'dinersClub';\n }\n break;\n case 4:\n return 'visa';\n case 5:\n if (secondInt > 0 && secondInt < 6) {\n return 'masterCard';\n }\n break;\n case 6:\n if (secondInt === 0) {\n if (value.length > 3) {\n const firstfour = value.substr(0, 4);\n if (firstfour === '6011') {\n return 'discover';\n }\n } else {\n return 'discover';\n }\n }\n if (secondInt === 4) {\n if (value.length > 2) {\n const firstthree = parseInt(value.substr(0, 3));\n if (firstthree > 643) {\n return 'discover';\n }\n } else {\n return 'discover';\n }\n }\n if (secondInt === 5) {\n return 'discover';\n }\n if (secondInt === 2) {\n if (value.length > 5) {\n const firstsix = parseInt(value.substr(0, 6));\n if (firstsix >= 622126 && firstsix <= 622925) {\n return 'discover';\n }\n } else {\n return 'discover';\n }\n }\n break;\n default:\n return 'unknown';\n }\n return 'unknown';\n}\n/* tslint:enable:cyclomatic-complexity */\n\nconst formatCreditCard = {\n detectCreditCardTypeFromValue,\n format,\n amexFormatter,\n dinersClubInternationalFormatter,\n discoverFormatter,\n masterCardFormatter,\n visaFormatter,\n unknownFormatter,\n};\n\nexport default formatCreditCard;\n","@import '../../styles/host';\n@import '../../styles/functions';\n\n:host {\n --comp-default-input-margin: #{var-list(var-prefixer(input-margin-top), --app-scale-6x, 30px) 0\n var-list(var-prefixer(input-margin-bottom), --app-scale-6x, 30px)};\n display: block;\n margin: var-list(--tct-input-margin, --comp-default-input-margin);\n font-size: var-list(var-prefixer(input-font-size), --app-font-size, inherit);\n}\n\n:host([hidden]) {\n display: none;\n}\n\n.field-container,\n.input-container {\n position: relative;\n}\n.field-container {\n --comp-input-tween: #{var-list(var-prefixer(input-tween), --tct-tween-2, --app-tween-2, unquote('0.4s ease'))};\n\n &.is-small {\n .btn-clear {\n --tct-btn-icon-width: 20px;\n --tct-icon-size: 17px;\n }\n }\n}\n\nlabel {\n --comp-label-padding: #{var-list(\n --tct-input-label-padding,\n unquote(\n '0 #{var-list(var-prefixer(input-label-padding-right), 0)} 0 #{var-list(var-prefixer(input-label-padding-left), 0)}'\n )\n )};\n display: block;\n padding: var(--comp-label-padding);\n color: var-list(var-prefixer(input-label-font-color), inherit);\n font-size: var-list(var-prefixer(input-label-font-size), inherit);\n font-weight: var-list(var-prefixer(input-label-font-weight), 600);\n text-transform: var-list(var-prefixer(input-label-text-transform), none);\n letter-spacing: var-list(var-prefixer(input-label-letter-spacing), normal);\n transition: color var(--comp-input-tween);\n}\n\n.optional-tag {\n --comp-label-optional-margin: #{var-list(\n --tct-input-label-optional-margin,\n unquote(\n '0 0 0 #{var-list(var-prefixer(input-label-optional-margin-left), --tct-scale-1, --app-scale-1x, 5px)}'\n )\n )};\n margin: var(--comp-label-optional-margin);\n color: var-list(\n var-prefixer(input-label-optional-font-color),\n --t-textA,\n --t-a11y-gray-color,\n rgba(77, 77, 77, 0.77)\n );\n font-size: var-list(var-prefixer(input-label-optional-font-size), --app-font-size-small, 12px);\n font-weight: var-list(var-prefixer(input-label-optional-font-weight), 400);\n}\n\n.count-tag {\n color: var-list(--tct-input-count-font-color, --t-textA, --t-a11y-gray-color, rgba(77, 77, 77, 0.77));\n font-size: var-list(--tct-input-count-font-size, --app-font-size-small, 12px);\n font-weight: var-list(--tct-input-count-font-weight, 400);\n text-align: right;\n width: var(--tct-input-count-width, auto);\n}\n\n.label-wrapper {\n --comp-label-margin: #{var-list(\n --tct-input-label-margin,\n unquote(\n '#{var-list(var-prefixer(input-label-margin-top), 0)} 0 #{var-list(var-prefixer(input-label-margin-bottom), --tct-scale-1, --app-scale-1x, 5px)}'\n )\n )};\n display: flex;\n gap: var-list(--tct-input-label-gap, --app-scale-2x, 10px);\n justify-content: space-between;\n align-items: end;\n margin: var(--comp-label-margin);\n line-height: var-list(var-prefixer(input-label-line-height), inherit);\n\n &:has(label.sr) {\n margin: 0;\n }\n}\n\n.input-container {\n --comp-input-background: #{var-list(--tct-input-background, var-prefixer(input-bg), --t-gray-14, #fcfcfd)};\n --comp-input-horizontal-gap: #{var-list(var-prefixer(input-horizontal-gap), 0)};\n --comp-input-border-top-left-radius: #{var-list(\n var-prefixer(input-border-top-left-radius),\n --tct-border-radius-1,\n --app-border-radius-1,\n 4px\n )};\n --comp-input-border-top-right-radius: #{var-list(\n var-prefixer(input-border-top-right-radius),\n --tct-border-radius-1,\n --app-border-radius-1,\n 4px\n )};\n --comp-input-border-bottom-right-radius: #{var-list(\n var-prefixer(input-border-bottom-right-radius),\n --tct-border-radius-1,\n --app-border-radius-1,\n 4px\n )};\n --comp-input-border-bottom-left-radius: #{var-list(\n var-prefixer(input-border-bottom-left-radius),\n --tct-border-radius-1,\n --app-border-radius-1,\n 4px\n )};\n --comp-input-border-radius: var(--comp-input-border-top-left-radius) var(--comp-input-border-top-right-radius)\n var(--comp-input-border-bottom-right-radius) var(--comp-input-border-bottom-left-radius);\n --comp-input-border-width: var(--tct-input-border-top-width, 1px) var(--tct-input-border-right-width, 1px)\n var(--tct-input-border-bottom-width, 1px) var(--tct-input-border-left-width, 1px);\n --comp-input-border-color: #{var-list(var-prefixer(input-border-color), --t-a11y-gray-color-AA, #404040)};\n --comp-input-prefix-clearance: calc(3 * var(--tct-input-prefix-font-size, 14px) + var(--tct-scale-1, 5px));\n --comp-input-icon-clearance: 34px;\n --comp-input-min-height: #{var-list(var-prefixer(input-min-height), 44px)};\n --comp-input-max-height: #{var-list(var-prefixer(input-max-height))};\n\n --comp-input-hover-ring-color: #{var-list(var-prefixer(input-hover-ring-color))};\n --comp-input-hover-ring: #{0 0 0 2px var(--t-base), 0 0 0 4px var(--comp-input-hover-ring-color),\n var-list(var-prefixer(input-hover-box-shadow), unquote('0 0 transparent'))};\n\n background: var(--comp-input-background);\n display: flex;\n align-items: center;\n gap: var-list(--tct-input-container-gap, --app-scale-2x, 10px);\n padding-inline: var-list(--tct-input-container-padding-inline);\n border-width: var(--comp-input-border-width);\n border-style: solid;\n border-color: var(--comp-input-border-color);\n border-radius: var(--comp-input-border-radius);\n box-shadow: var-list(var-prefixer(input-box-shadow), none);\n transition:\n border-width var(--comp-input-tween),\n border-color var(--comp-input-tween),\n box-shadow var(--comp-input-tween);\n\n :host([disabled]:not([disabled='false'])) & {\n cursor: not-allowed;\n opacity: var-list(var-prefixer(input-disabled-opacity), --tct-disabled-opacity, --app-disabled-opacity, 0.4);\n }\n\n .has-error & {\n border-color: var-list(--tct-input-error-border-color, --const-stoplight-alert, #d20a0a);\n background: var-list(--tct-input-error-background, --comp-input-background);\n box-shadow: var-list(--tct-input-error-box-shadow, --comp-input-hover-ring);\n }\n\n &:hover {\n border-color: var-list(--tct-input-hover-border-color, --comp-input-border-color);\n background: var-list(--tct-input-hover-background, --comp-input-background);\n box-shadow: var-list(--tct-input-hover-box-shadow, --comp-input-hover-ring);\n\n .has-error & {\n border-color: var-list(\n --tct-input-error-hover-border-color,\n --tct-input-error-border-color,\n --const-stoplight-alert,\n #d20a0a\n );\n background: var-list(\n --tct-input-error-hover-background,\n --tct-input-error-background,\n --comp-input-background\n );\n box-shadow: var-list(\n --tct-input-error-hover-box-shadow,\n --tct-input-error-box-shadow,\n --comp-input-hover-ring\n );\n }\n }\n\n .has-focus & {\n border-color: var-list(var-prefixer(input-focus-border-color), --comp-input-border-color);\n background: var-list(--tct-input-focus-background, --comp-input-background);\n box-shadow: var-list(--tct-input-focus-box-shadow, --const-double-focus-ring);\n }\n\n .has-focus.has-error &,\n .has-focus.has-error &:hover {\n border-color: var-list(\n --tct-input-error-focus-border-color,\n --tct-input-error-border-color,\n --const-stoplight-alert,\n #d20a0a\n );\n background: var-list(--tct-input-error-focus-background, --tct-input-error-background, --comp-input-background);\n box-shadow: var-list(\n --tct-input-error-focus-box-shadow,\n --tct-input-error-box-shadow,\n --const-double-focus-ring\n );\n }\n}\n\n.input-field {\n flex: 1;\n border: 0;\n -webkit-appearance: none;\n appearance: none;\n box-sizing: border-box;\n min-height: var(--comp-input-min-height);\n max-height: var(--comp-input-max-height);\n overflow-y: hidden;\n height: var-list(var-prefixer(input-height), 44px);\n width: 100%;\n padding: var(--tct-input-padding, 0);\n background: transparent;\n color: var-list(var-prefixer(input-font-color), --t-text, inherit);\n display: inline-block;\n text-align: var(--tct-input-align, 'start');\n font-weight: var-list(var-prefixer(input-font-weight), 400);\n\n &:focus {\n outline: none;\n box-shadow: none;\n }\n /* To remove up/down arrow in number field for webkit based browser */\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n /* For Firefox */\n &[type='number'] {\n -moz-appearance: textfield;\n }\n\n &::-ms-clear {\n display: none;\n }\n\n &[type='search'] {\n &::-webkit-search-decoration,\n &::-webkit-search-cancel-button,\n &::-webkit-search-results-button,\n &::-webkit-search-results-decoration {\n display: none;\n }\n }\n\n &[disabled]:not([disabled='false']) {\n cursor: not-allowed;\n }\n\n .right-aligned & {\n text-align: right;\n }\n\n &:is(input) {\n flex: 1;\n }\n\n &:is(button) {\n display: inline-flex;\n align-items: center;\n\n .has-custom-display & {\n height: auto;\n padding: 0;\n }\n\n span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n }\n }\n}\n\n.custom-display-container {\n max-width: 100%;\n\n .has-custom-display & {\n --comp-default-padding: var(--app-scale-2x, 10px) var(--app-scale-2x, 10px) var(--app-scale-3x, 15px);\n padding: var-list(var-prefixer(input-padding), --comp-default-padding);\n width: 100%;\n }\n}\n\n.input-field::placeholder,\n.placeholder-text {\n color: var-list(var-prefixer(input-placeholder-font-color), --t-textA, --app-gray-d1, rgba(77, 77, 77, 0.77));\n}\n\n.pseudo-input-container {\n min-width: 0;\n flex: 1;\n}\n\n.input-icons-container-left,\n.input-icons-container-right {\n --tct-btn-icon-hover-background: var(--tct-input-btn-hover-background);\n --tct-btn-hover-background: var(--tct-input-btn-hover-background);\n\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: var(--comp-input-horizontal-gap);\n\n > div:not(.vertical-separator) {\n min-width: var-list(--tct-input-icon-container-icon-min-width, 44px);\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: var-list(--tct-input-icon-container-font-size, inherit);\n }\n\n &:empty {\n display: var(--tct-input-icon-container-empty-display, block);\n }\n}\n\n.input-icons-container-left {\n padding-left: var(--comp-input-horizontal-gap);\n}\n\n.input-icons-container-right {\n padding-right: var(--comp-input-horizontal-gap);\n --comp-visibility-toggle-padding: 0px #{var-list(--app-scale-2x, 10px)};\n\n .btn-visibility-toggle {\n --tct-btn-height: var(--comp-input-min-height);\n --tct-btn-padding-inline: #{var-list(--tct-input-visibility-toggle-padding, --app-scale-2x, 10px)};\n --tct-btn-font-weight: #{var-list(--tct-input-visibility-toggle-font-weight, 400)};\n\n color: var-list(--tct-input-visibility-toggle-font-color, --t-primary, #0079c1);\n font-size: var-list(--tct-input-visibility-toggle-font-size, --app-font-size-small, 12px);\n }\n}\n\nq2-icon {\n margin-top: calc(#{var-list(var-prefixer(input-border-top-width), 1px)} / 2);\n margin-bottom: calc(#{var-list(var-prefixer(input-border-bottom-width), 1px)} / 2);\n pointer-events: none;\n color: var-list(var-prefixer(input-icon-stroke-primary), --t-a11y-gray-color, --t-textA, --app-gray, #747474);\n --tct-icon-stroke-primary: #{var-list(\n var-prefixer(input-icon-stroke-primary),\n --t-a11y-gray-color,\n --t-textA,\n --app-gray,\n #747474\n )};\n}\n\n.icon-left-muted {\n opacity: 0.5;\n}\n\n.input-prefix,\n.input-suffix {\n min-height: var(--comp-input-min-height);\n max-height: var(--comp-input-max-height);\n height: var-list(var-prefixer(input-height), 44px);\n font-size: var-list(var-prefixer(input-prefix-font-size), inherit);\n color: var-list(var-prefixer(input-prefix-font-color), inherit);\n background: var-list(\n --tct-input-prefix-background,\n var-prefixer(input-prefix-bg),\n --tct-input-background,\n var-prefixer(input-bg),\n var-prefixer(gray-14),\n #f2f2f2\n );\n transition:\n color var(--comp-input-tween),\n background var(--comp-input-tween);\n}\n\n.input-prefix {\n border-top-left-radius: calc(\n var(--comp-input-border-top-left-radius) - #{var-list(var-prefixer(input-border-top-width), 1px)} - #{var-list(\n var-prefixer(input-border-left-width),\n 1px\n )}\n );\n border-bottom-left-radius: calc(\n var(--comp-input-border-bottom-left-radius) - #{var-list(var-prefixer(input-border-bottom-width), 1px)} - #{var-list(\n var-prefixer(input-border-left-width),\n 1px\n )}\n );\n pointer-events: none; /* used to allow iOS voiceover to display keyboard in input TCT-1194 */\n}\n\n.input-suffix {\n border-top-right-radius: calc(\n var(--comp-input-border-top-right-radius) - #{var-list(var-prefixer(input-border-top-width), 1px)} - #{var-list(\n var-prefixer(input-border-right-width),\n 1px\n )}\n );\n border-bottom-right-radius: calc(\n var(--comp-input-border-bottom-right-radius) - #{var-list(var-prefixer(input-border-bottom-width), 1px)} - #{var-list(\n var-prefixer(input-border-right-width),\n 1px\n )}\n );\n}\n\n.icon-error {\n color: var-list(--tct-stoplight-error, --const-stoplight-alert, #d20a0a);\n --tct-icon-stroke-primary: #{var-list(--tct-stoplight-error, --const-stoplight-alert, #d20a0a)};\n}\n\n.messages-container {\n height: 0px;\n overflow: hidden;\n background: var-list(\n --tct-message-background,\n var-prefixer(message-bg),\n var-prefixer(gray-14),\n --tct-gray-l3,\n --app-gray-l3,\n #f2f2f2\n );\n box-shadow: var-list(\n var-prefixer(input-message-box-shadow),\n --tct-box-shadow-1,\n --app-shadow-1,\n unquote(\"0px 0px 2px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.14)\")\n );\n transition: height var-list(var-prefixer(input-messages-tween), --tct-tween-1, --app-tween-1, unquote('0.2s ease'));\n margin-top: var-list(--tct-input-messages-margin-top, 2px);\n z-index: var-list(--tct-input-messages-z-index, 5);\n position: absolute;\n width: 100%;\n color: var-list(var-prefixer(input-messages-font-color), inherit);\n\n // Sync up border radius with q2-message\n border-radius: var(--tct-message-border-radius, inherit);\n}\n\n.has-error label {\n color: var-list(var-prefixer(input-error-label-font-color), var-prefixer(input-label-font-color), inherit);\n}\n\n.has-error:not(.has-focus) .input-prefix,\n.has-error:not(.has-focus) .input-suffix {\n color: var-list(var-prefixer(input-error-prefix-font-color), inherit);\n background: var-list(\n --tct-input-error-prefix-background,\n var-prefixer(input-error-prefix-bg),\n --tct-input-background,\n var-prefixer(input-bg),\n var-prefixer(gray-14),\n --tct-gray-l3,\n --app-gray-l3,\n #f2f2f2\n );\n}\n\n.icon-left {\n width: 26px;\n height: 26px;\n}\n\n.vertical-separator {\n height: calc(var(--comp-input-min-height) - 2px);\n border-right-width: var(--tct-input-prefix-border-width, 1px);\n border-right-style: solid;\n border-right-color: var-list(\n var-prefixer(input-prefix-border-color),\n var-prefixer(input-border-color),\n --t-a11y-gray-color-AA,\n #404040\n );\n}\n","import {\n Component,\n Prop,\n Element,\n State,\n Event,\n EventEmitter,\n h,\n Watch,\n Listen,\n Fragment,\n Method,\n} from '@stencil/core';\nimport {\n createGuid,\n getAriaValueFromProp,\n labelDOM,\n loc,\n messagesDOM,\n setMessageHeight,\n handleAriaLabel,\n overrideFocus,\n isEventFromElement,\n isMobile,\n hasSlotContent,\n nextPaint,\n} from 'src/utils';\nimport { IFormatterValueObject, ICursorData, IEventDetail } from './q2-input-types';\nimport formatCurrency from './formatting/currency';\nimport formatPhoneNumber from './formatting/phone';\nimport formatSSN from './formatting/ssn';\nimport formatTIN from './formatting/tin';\nimport formatAlphanumeric from './formatting/alphanumeric';\nimport formatAlpha from './formatting/alpha';\nimport formatNumeric, { formatPercentage } from './formatting/numeric';\nimport formatPostalCode from './formatting/postal';\nimport formatDate from './formatting/date';\nimport formatCreditCard from './formatting/credit-card';\nimport { Q2Icon } from '../q2-icon/q2-icon';\nimport { Q2Badge } from '../q2-badge/q2-badge';\n\nconst inputTypeMap = {\n text: 'text',\n tel: 'tel',\n number: 'number',\n password: 'text',\n search: 'search',\n url: 'url',\n email: 'email',\n currency: 'text',\n phone: 'tel',\n ssn: 'text',\n alphanumeric: 'text',\n alpha: 'text',\n numeric: 'text',\n percentage: 'text',\n postal: 'text',\n date: 'text',\n 'credit-card': 'text',\n};\n\nexport type InputType = keyof typeof inputTypeMap;\n\n@Component({ tag: 'q2-input', shadow: true, styleUrl: 'q2-input.scss' })\nexport class Q2Input {\n // #region Own Properties\n\n guid = createGuid();\n inputRef: HTMLInputElement;\n isMobile: boolean = isMobile();\n mutationObserver: MutationObserver;\n resizeObserver: ResizeObserver;\n scheduledAfterRender: (() => void)[] = [];\n textSelectedForDeletion: boolean;\n valueOnFocus: string;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n checkSlotCount: number = 0;\n\n @State()\n formattedValueObject: IFormatterValueObject;\n\n @State()\n hasFocus: boolean;\n\n @State()\n isSmall: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /**\n * Sets readonly to true on the input without adding the \"read only\" label.\n *\n * Can be used to prevent user input while still presenting the necessary information for assistive technology.\n * @private\n */\n @Prop({ mutable: true })\n _preventEntry: boolean = undefined;\n\n /**\n * Allows for correct semantics of q2-input element when aria-expanded.\n * @private\n * Defaults to undefined\n * Will assign role to combobox when used inside q2-select and q2-calendar.\n */\n @Prop({ mutable: true })\n _role: 'combobox' | undefined = undefined;\n\n @Prop()\n ariaActivedescendant: string;\n\n @Prop()\n ariaControls: string;\n\n @Prop()\n ariaExpanded: string;\n\n @Prop()\n ariaHaspopup: string;\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n @Prop()\n ariaOwns: string;\n\n /**\n * The `autocapitalize` attribute is an enumerated attribute that controls whether and how text input is automatically capitalized as it is entered/edited by the user.\n * @info\n * This attribute only affects the behavior of input mechanisms like virtual keyboards on mobile devices and voice input.\n */\n @Prop({ reflect: true })\n autocapitalize: string;\n\n /**\n * The HTML autocomplete attribute lets web developers specify what permission (if any) the user agent has to provide automated assistance in filling out form field values,\n * as well as guidance to the browser as to the type of information expected in the field.\n *\n * [See MDN for a list of supported values](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete#values).\n */\n @Prop({ reflect: true })\n autocomplete: string;\n\n /**\n * A string that indicates whether or not to activate automatic correction while the user is editing this field.\n * @warning\n * This is currently only supported in Safari.\n */\n @Prop({ reflect: true })\n autocorrect: 'on' | 'off';\n\n /**\n * Autofocus is enabled when the property is added to an element. To disable, remove attribute or set it to false.\n * If applied to multiple elements, the first one will receive focus.\n */\n @Prop({ reflect: true })\n autofocus: boolean;\n\n /** The color of the badge when in the active state. */\n @Prop({ reflect: true })\n badgeTheme: Q2Badge['theme'];\n\n /** Displays a `q2-badge` element on the right side of the input. */\n @Prop({ reflect: true })\n badgeValue: string;\n\n /** Renders an icon button when the field is non-empty. Pressing the button clears all input from the field. */\n @Prop({ reflect: true })\n clearable: boolean;\n\n /**\n * If provided a value, it sets the `aria-current` attribute on the inner input.\n * [See MDN for more information on aria-current](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current).\n */\n @Prop()\n current: 'page' | 'step' | 'location' | 'date' | 'time' | 'true' | 'false';\n\n /** Indicates the field cannot be focused or interacted with. */\n @Prop({ reflect: true })\n disabled: boolean = false;\n\n /**\n * Each item in the `errors` array will appear below the input field when the field is focused.\n * @localizable\n */\n @Prop()\n errors: string[];\n\n /**\n * Defines the field's expected input format, and automatically masks user input to conform.\n * Specific types support different modifier options. See the section on Format Modifiers for all available options.\n */\n @Prop({ reflect: true })\n formatModifier: string;\n\n /**\n * Hide's the field's `<label>` element from view.\n * @warning\n * Only use when a visible label is impractical.\n */\n @Prop({ reflect: true, mutable: true })\n hideLabel: boolean;\n\n /**\n * When `true` and the input field has an active validation error, the field shows the error state without displaying associated error messages below the field (from the errors array above).\n * Primarily used for dropdown selects and date pickers whose controls appear below the input field (where the error messages, if displayed, would also appear).\n */\n @Prop({ reflect: true })\n hideMessages: boolean;\n\n /**\n * Each item in the `hints` array will appear below the input field when the field is focused.\n * @info\n * The `errors` array takes precedence over the `hints` array. If an input field has both hints and errors, only the errors will display.\n * Once all errors are resolved, the hints display the next time the field is focused.\n * @localizable\n */\n @Prop()\n hints: string[];\n\n /** Shows a left-aligned [q2-icon](https://tecton.q2developer.com/design-system/q2-icon/) within the field. */\n @Prop({ reflect: true })\n iconLeft: Q2Icon['type'];\n\n /** Shows a right-aligned [q2-icon](https://tecton.q2developer.com/design-system/q2-icon/) within the field. */\n @Prop({ reflect: true })\n iconRight: Q2Icon['type'];\n\n /**\n * The label that appears above the field. This is announced by screen readers when the field is focused.\n * @localizable\n */\n @Prop({ reflect: true, mutable: true })\n label: string;\n\n /**\n * When present, it does not allow a value greater than `max` when the user uses the Up/Down arrow keys to change the value.\n * @info\n * Only applicable when `type=\"number\"`.\n */\n @Prop({ reflect: true })\n max: number;\n\n /**\n * Defines the maximum allowed input length in characters. Formatting characters (e.g. `.`, `-`, etc) are included in the `maxlength` comparison.\n * Make sure you account for them when setting the `maxlength` value. Input types that use masks have their own inherent `maxlength`.\n */\n @Prop({ reflect: true, mutable: true })\n maxlength: number;\n\n /**\n * When present, it does not allow a value less than the `min` when the user uses the Up/Down arrow keys to change the value.\n * @info\n * Only applicable when `type=\"number\"`.\n */\n @Prop({ reflect: true })\n min: number;\n\n /** Appends \"(optional)\" to the field label, and sets `aria-required` on the nested input tag to `false`. */\n @Prop({ reflect: true })\n optional: boolean;\n\n /**\n * The pattern string of the input field, regular expression string is expected.\n * This allows us to check the validity user's input.\n * For instance,\n * &lt;q2-input label=\"My input\" pattern=\"[a-zA-Z0-9]{3,5}\" id=\"myInput\"&gt;\n *\n * - Allows only 3~5 alphanumeric letters\n *\n * In Javascript, you can check the validity object in your q2-input\n * Type \"abcdefgh\", then access the validity object\n * @snippet\n * const myInput = document.querySelector('#myInput');\n * console.log(myInput.validity);\n */\n @Prop({ reflect: true, mutable: true })\n pattern: string;\n\n /**\n * Text that appears within the field when it is blurred and empty.\n * Placeholder text disappears when the user focuses on the field and provides input.\n * @info\n * Primarily used for rare cases in which a visible form label is not expected (e.g., search fields).\n * @localizable\n */\n @Prop({ reflect: true })\n placeholder: string;\n\n /** Component will display as a clickable `<button>` styled to be identical to the default `<input>` field. */\n @Prop({ reflect: true })\n pseudo: boolean;\n\n /**\n * Appends \"(read only)\" to the field label, and field becomes unusable, but remains focusable.\n * Takes priority over `optional` if both are `true`.\n */\n @Prop({ reflect: true })\n readonly: boolean;\n\n /**\n * Indicates the element's intended purpose to assistive technology.\n * @deprecated\n */\n @Prop()\n role: string;\n\n /**\n * Shows a character counter above the input field to track the number of characters currently in the field.\n * If `maxlength` is set, `showCount` displays the number of characters in relation the `maxlength` value.\n */\n @Prop({ reflect: true })\n showCount: boolean;\n\n /**\n * Displays a toggle button at the end of the input field which shows or hides the actual value.\n * @info\n * Only applicable when `type` is `text`, `password`, or `ssn`.\n */\n @Prop({ reflect: true })\n showVisibilityToggle: boolean = false;\n\n /**\n * When present, it jumps the value in incremens of `step` when the user uses the Up/Down arrow keys to change the value.\n * @info\n * Only applicable when `type=\"number\"`.\n */\n @Prop({ reflect: true })\n step: number;\n\n /**\n * Controls visibility of the value when the type is `text`, `password`, or `ssn`.\n * When the input type is `password`, it will default to `true`, hiding the text.\n */\n @Prop({ reflect: true, mutable: true })\n textHidden: boolean;\n\n /** Specifies the field's expeted [input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types), and provides the optimal keyboard on mobile devices. */\n @Prop({ reflect: true })\n type: InputType = 'text';\n\n @Prop({ reflect: true, mutable: true })\n validity: ValidityState;\n\n /**\n * The value of the input field.\n * @info\n * The visible value of formatted input fields may not match the element's `value` property.\n * When setting an input's value programmatically (e.g. pre-populating a form), ensure that the supplied value is in a format that can be handled by its consuming logic.\n * `q2-input` does not change its own `value` outside of its default change event handler.\n *\n * In `q2-input` where `type=\"currency\"`\n * - element.value = 1234.56\n * - visible value: $1,234.56\n *\n */\n @Prop({ mutable: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the field loses focus after the value has been changed.\n * @legacyEvent\n */\n @Event()\n change: EventEmitter<IEventDetail>;\n\n /**\n * Emitted when the field value is cleared.\n *\n * Requires the `clearable` prop to be set to `true`.\n */\n @Event()\n clear: EventEmitter<undefined>;\n\n /**\n * Emitted when the field value is formatted.\n */\n @Event()\n formatted: EventEmitter<IFormatterValueObject>;\n\n /**\n * Emitted when the field value is updated.\n * @legacyEvent\n */\n @Event()\n input: EventEmitter<IEventDetail>;\n\n /**\n * Emitted when the validation is updated.\n * @legacyEvent\n */\n @Event()\n invalid: EventEmitter<IEventDetail>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.manageClearableResizeObserver();\n this.mutationObserver?.disconnect();\n this.mutationObserver = null;\n }\n\n componentWillLoad() {\n if (isNaN(this.maxlength)) {\n this.maxlength = undefined;\n }\n this.formattedValueObject = this.getFormattedValue(this.stringValue, true);\n\n Object.defineProperty(this.hostElement, 'formattedValue', {\n get: () => this.formattedValueObject?.formattedValue ?? '',\n });\n\n handleAriaLabel(this);\n if (this.textHidden === undefined) {\n this.textHidden = this.type === 'password';\n }\n\n this.manageClearableResizeObserver(this.clearable);\n }\n\n componentDidLoad() {\n if (!this.pseudo) {\n this.inputField.value = this.formattedValueObject.formattedValue;\n }\n\n if (this.autofocus === true) {\n this.inputField.focus();\n }\n\n overrideFocus(this.hostElement);\n const observer = new MutationObserver(this.onMutationObserved);\n observer.observe(this.hostElement, { childList: true });\n this.mutationObserver = observer;\n }\n\n componentDidRender() {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('change')\n onHostElementChange(event: CustomEvent) {\n event.stopPropagation();\n if (event.target === this.hostElement && !this.hostElement.onchange) {\n this.value = event.detail.value;\n }\n }\n\n @Listen('focus')\n onHostElementFocus(event) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.inputField.focus();\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * Emulates firing checkValidity on `<input>`, emits `invalid` event if validation failed.\n */\n @Method()\n checkValidity() {\n this.inputRef.checkValidity();\n this.validateInput();\n }\n\n /**\n * Emulates clicking the clear button when the input is clearable.\n *\n * @warning\n * Only applicable when the input is clearable.\n *\n * @testOnly\n */\n @Method()\n clearValue() {\n if (!this.clearable) return;\n this.onClearInput();\n }\n\n /**\n * Emulates focusing the `<input>`, entering the provided value, and emitting an `input` event.\n *\n * This method leaves the focus on the `<input>` and as a result does not trigger the `change` event. If you want\n * to trigger the` change` event, move the focus to another element after calling this method.\n *\n * @testOnly\n */\n @Method()\n setValue(value: string) {\n const { inputField } = this;\n inputField.focus();\n inputField.dispatchEvent(new FocusEvent('focus'));\n inputField.value = value;\n inputField.dispatchEvent(new InputEvent('input'));\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\n }\n\n @Watch('clearable')\n manageClearableResizeObserver(clearable?: boolean) {\n const isSmallThreshold = 190;\n if (clearable) {\n if (this.resizeObserver) return;\n this.resizeObserver = new ResizeObserver(([entry]) => {\n this.isSmall = isSmallThreshold > entry.contentRect.width;\n });\n this.resizeObserver.observe(this.hostElement);\n } else {\n this.isSmall = false;\n this.resizeObserver?.unobserve(this.hostElement);\n this.resizeObserver = null;\n }\n }\n\n @Watch('errors')\n errorsObserver() {\n this.hasFocus && this.scheduledAfterRender.push(() => setMessageHeight(this));\n }\n\n @Watch('formatModifier')\n formatModifierObserver() {\n this.formatAndUpdateValueFromProp();\n }\n\n @Watch('formattedValueObject')\n formattedValueObjectObserver() {\n this.formatted.emit(this.formattedValueObject);\n }\n\n @Watch('hints')\n hintsObserver() {\n this.hasFocus && this.scheduledAfterRender.push(() => setMessageHeight(this));\n }\n\n @Watch('type')\n typeObserver() {\n this.formatAndUpdateValueFromProp();\n }\n\n @Watch('value')\n valueObserver() {\n this.formatAndUpdateValueFromProp();\n }\n\n // #endregion\n // #region Local Methods\n\n get ariaAttributes() {\n return {\n ariaOwns: getAriaValueFromProp(this.ariaOwns),\n ariaHaspopup: getAriaValueFromProp(this.ariaHaspopup, [\n 'true',\n 'false',\n 'menu',\n 'listbox',\n 'tree',\n 'grid',\n 'dialog',\n ]),\n ariaExpanded: getAriaValueFromProp(this.ariaExpanded, ['true', 'false']),\n ariaActivedescendant: getAriaValueFromProp(this.ariaActivedescendant),\n };\n }\n\n get canSetSelection(): boolean {\n // email and number type don't support setSelectionRange\n return !['email', 'number'].includes(this.computedType);\n }\n\n get clearClasses() {\n const classes = ['btn-clear'];\n if (!this.clearable || !(this.inputField?.value || this.value)) {\n classes.push('hidden');\n }\n return classes;\n }\n\n get computedAutocomplete() {\n // force off for currency type\n if (this.type === 'currency') return 'transaction-amount';\n return this.autocomplete || 'off';\n }\n\n get computedClassForIconLeft(): string | undefined {\n let className = 'icon-left';\n if (this.formattedValueObject.leftIconMuted) {\n className += ' icon-left-muted';\n }\n return className;\n }\n\n get computedIconLeft(): string | undefined {\n if (this.formattedValueObject.prefix) {\n return;\n }\n\n if (this.type === 'search') {\n return 'search';\n }\n\n if (this.formattedValueObject.leftIcon) {\n return this.formattedValueObject.leftIcon;\n }\n\n return this.iconLeft;\n }\n\n get computedType() {\n if (['password', 'text', 'ssn'].includes(this.type) && this.textHidden) {\n return 'password';\n } else {\n return (this.type && inputTypeMap[this.type]) || 'text';\n }\n }\n\n get hasCustomDisplaySlot() {\n return !!this.hostElement.querySelector('[slot=custom-display]');\n }\n\n get hasError() {\n return Array.isArray(this.errors) && this.errors.length > 0;\n }\n\n get hasInputLeftSlot() {\n return hasSlotContent(this.hostElement, 'input-left');\n }\n\n get hasInputRightSlot() {\n return hasSlotContent(this.hostElement, 'input-right');\n }\n\n get inputDescribedBy() {\n return this.showMessages ? `${this.inputId}-description` : undefined;\n }\n\n get inputField() {\n return this.hostElement.shadowRoot.querySelector<HTMLInputElement>('.input-field');\n }\n\n get inputId() {\n return `input-guid-${this.guid}`;\n }\n\n get inputMode() {\n const inputModeMap = {\n currency: 'numeric',\n ssn: 'numeric',\n tin: 'numeric',\n numeric: 'decimal',\n percentage: 'decimal',\n postal: 'numeric',\n date: 'numeric',\n 'credit-card': 'numeric',\n };\n\n return (this.type && inputModeMap[this.type]) || undefined;\n }\n\n get isMaskedType(): boolean {\n const maskedTypes: string[] = [\n 'currency',\n 'phone',\n 'ssn',\n 'tin',\n 'alphanumeric',\n 'alpha',\n 'numeric',\n 'percentage',\n 'postal',\n 'date',\n 'credit-card',\n ];\n\n return maskedTypes.includes(this.type);\n }\n\n get messages(): string[] {\n return (\n (this.errors && this.errors.length > 0 && this.errors) ||\n (this.hints && this.hints.length > 0 && this.hints) ||\n []\n );\n }\n\n get shouldCursorStartAtEnd() {\n return this.type === 'currency';\n }\n\n get shouldCursorStayAtEnd() {\n return this.isMobile && this.type === 'currency';\n }\n\n get showIconSeparator(): boolean {\n return this.type === 'credit-card' || !!this.formattedValueObject.prefix;\n }\n\n get showMessages() {\n return this.messages.length > 0 && !this.hideMessages;\n }\n\n get stringValue(): string {\n return (this.value && String(this.value)) || '';\n }\n\n get visibilityToggleAriaLabel(): string {\n return `tecton.element.input.toggleAriaLabel.${this.textHidden ? 'show' : 'hide'}`;\n }\n\n get visibilityToggleText(): string {\n return loc(`tecton.element.input.toggle.${this.textHidden ? 'show' : 'hide'}`);\n }\n\n get wrapperClasses() {\n const classNames = ['field-container'];\n if (this.hasError) classNames.push('has-error');\n if (!!this.value) classNames.push('has-value');\n if (this.clearable && !!this.value) classNames.push('has-clear');\n if (this.hasFocus) classNames.push('has-focus');\n if (this.isSmall) classNames.push('is-small');\n if (this.formattedValueObject.prefix) classNames.push('has-prefix');\n if (this.computedIconLeft) classNames.push('has-icon-left');\n if (this.showIconSeparator) classNames.push('has-icon-separator');\n if (this.formattedValueObject.suffix) classNames.push('has-suffix');\n if (!this.formattedValueObject.suffix && this.iconRight) classNames.push('has-icon-right');\n if (this.type === 'currency') classNames.push('right-aligned');\n else classNames.push('left-aligned');\n if (this.hasCustomDisplaySlot) classNames.push('has-custom-display');\n\n return classNames.join(' ');\n }\n\n calculateCursorPositionOnFocus(): ICursorData {\n const { inputField } = this;\n const valueLength = inputField?.value?.length ?? 0;\n const startingPosition = inputField?.selectionStart ?? valueLength;\n\n return {\n startingPosition,\n valueLength,\n previousValueLength: valueLength,\n hasSelection: getSelection().toString().length > 0,\n };\n }\n\n calculateCursorPositionOnInput(): ICursorData {\n const input = this.inputField;\n const formattedLength = this.formattedValueObject.formattedValue.length;\n const currentValueLength = input.value.length;\n const defaultPosition = this.type === 'currency' ? formattedLength : 0;\n return {\n startingPosition: (input && input.selectionStart) || defaultPosition,\n valueLength: formattedLength,\n previousValueLength: input && currentValueLength,\n hasSelection: false,\n };\n }\n\n countDOM() {\n if (!this.showCount) return;\n const { maxlength, formattedValueObject } = this;\n\n return (\n <div class=\"count-tag\">\n {formattedValueObject.unformattedValue.length}\n {maxlength && `/${maxlength}`}\n </div>\n );\n }\n\n formatAndUpdateValueFromProp() {\n this.formattedValueObject = this.getFormattedValue(this.stringValue, true);\n\n if (!this.pseudo) {\n const setValue = () => {\n this.inputField.value = this.formattedValueObject.formattedValue;\n };\n\n this.inputField ? setValue() : this.scheduledAfterRender.push(() => setValue());\n }\n }\n\n getFormattedValue(value: string, valueChangedFromProperty: boolean): IFormatterValueObject {\n const formattingFunctions = {\n currency: formatCurrency,\n phone: formatPhoneNumber,\n ssn: formatSSN,\n tin: formatTIN,\n alphanumeric: formatAlphanumeric,\n alpha: formatAlpha,\n numeric: formatNumeric,\n percentage: formatPercentage,\n postal: formatPostalCode,\n date: formatDate,\n 'credit-card': formatCreditCard.format,\n };\n\n if (formattingFunctions[this.type]) {\n return formattingFunctions[this.type](value, this.formatModifier, valueChangedFromProperty);\n }\n\n return {\n value,\n formattedValue: value,\n fullyFormattedValue: value,\n formattingCharacterCount: 0,\n unformattedValue: value,\n };\n }\n\n handleCurrencyDeletion(event: InputEvent) {\n // Don't do anything if text was selected for deletion\n if (this.textSelectedForDeletion) {\n this.textSelectedForDeletion = false;\n return;\n }\n // We only care about \"Backspace\" and \"Delete\" events\n if (event.inputType !== 'deleteContentBackward' && event.inputType !== 'deleteContentForward') return;\n\n const input = event.target as HTMLInputElement;\n const cursorPosition = input.selectionStart;\n const { formattedValue } = this.formattedValueObject;\n\n if (cursorPosition === null) return;\n\n let cursorMap;\n switch (event.inputType) {\n case 'deleteContentBackward':\n const valueBeforeCursor = formattedValue.substring(0, cursorPosition + 1);\n const isPrevCharAlphaNum = /[a-zA-Z0-9]$/.test(valueBeforeCursor);\n cursorMap = {\n leftIndex: isPrevCharAlphaNum ? cursorPosition : cursorPosition - 1,\n rightIndex: isPrevCharAlphaNum ? cursorPosition + 1 : cursorPosition,\n afterCursorOffset: 0,\n newCursorOffset: 1,\n };\n break;\n case 'deleteContentForward':\n const valueAfterCursor = formattedValue.substring(cursorPosition);\n const isNextCharAlphaNum = /^[a-zA-Z0-9]/.test(valueAfterCursor);\n cursorMap = {\n leftIndex: isNextCharAlphaNum ? cursorPosition : cursorPosition + 1,\n rightIndex: isNextCharAlphaNum ? cursorPosition + 1 : cursorPosition + 2,\n afterCursorOffset: 1,\n newCursorOffset: 0,\n };\n break;\n default:\n return;\n }\n\n // Ensure the cursor doesn't move with a newly formatted value\n const newValue = [\n formattedValue.substring(0, cursorMap.leftIndex),\n formattedValue.substring(cursorMap.rightIndex),\n ].join('');\n const charactersAfterCursor = formattedValue.length - cursorPosition - cursorMap.afterCursorOffset;\n const newFormattedValue = this.getFormattedValue(newValue, false).formattedValue;\n const newCursorPosition = Math.max(\n newFormattedValue.length - charactersAfterCursor + cursorMap.newCursorOffset,\n 0\n );\n\n input.value = newFormattedValue;\n input.setSelectionRange(newCursorPosition, newCursorPosition);\n\n // This handles a runtime issue when a character is deleted from the beginning of the input\n if (newCursorPosition === 0) {\n nextPaint(() => input.setSelectionRange(newCursorPosition, newCursorPosition));\n }\n }\n\n /**\n * Sets textSelectedForDeletion to true if the user has selected text for deletion\n * This is used to prevent other logic from running when text is deleted\n */\n handleCurrencyKeydown = (event: KeyboardEvent) => {\n if (event.key !== 'Backspace' && event.key !== 'Delete') return;\n const inputElement = this.inputField;\n this.textSelectedForDeletion = inputElement.selectionStart !== inputElement.selectionEnd;\n };\n\n handleDataInput(newFormattedValue: IFormatterValueObject) {\n if (\n this.maxlength === undefined ||\n newFormattedValue.unformattedValue.length <= this.maxlength ||\n newFormattedValue.unformattedValue.length <= this.formattedValueObject.unformattedValue.length\n ) {\n this.formattedValueObject = newFormattedValue;\n } else if (this.maxlength) {\n newFormattedValue = this.getFormattedValue(\n newFormattedValue.unformattedValue.substring(0, this.maxlength),\n false\n );\n this.formattedValueObject = newFormattedValue;\n }\n this.handleValueAndCursor();\n }\n\n handleValueAndCursor = () => {\n // ORDER IMPORTANT: calculate cursor position -> set value -> set cursor position\n const cursorPosition = this.calculateCursorPositionOnInput();\n // when type=number: returns only valid decimal on input event, should not update itself (e.g. typing \"1.\" )\n if (this.type !== 'number') this.inputField.value = this.formattedValueObject.formattedValue;\n this.input.emit({\n value: this.formattedValueObject.value,\n formattedValue: this.formattedValueObject.fullyFormattedValue,\n minFormattedLength: this.formattedValueObject.minFormattedLength,\n ...(this.formattedValueObject.type && { type: this.formattedValueObject.type }),\n });\n if (!this.formattedValueObject.value) {\n this.clear.emit();\n }\n this.setCursorPosition(cursorPosition);\n };\n\n /* tslint:disable:cyclomatic-complexity */\n inputContainerDOM() {\n const { hasInputLeftSlot, hasInputRightSlot } = this;\n return (\n <div\n class=\"input-container\"\n tabindex={-1}\n test-id=\"inputContainer\"\n >\n <div class=\"input-icons-container-left\">\n {this.formattedValueObject.prefix && (\n <div class=\"input-prefix\">{this.formattedValueObject.prefix}</div>\n )}\n {this.computedIconLeft && (\n <div>\n <q2-icon\n type={this.computedIconLeft}\n class={this.computedClassForIconLeft}\n />\n </div>\n )}\n {hasInputLeftSlot && <slot name=\"input-left\" />}\n {this.showIconSeparator && <div class=\"vertical-separator\" />}\n {this.hasError && this.type === 'currency' && (\n <div\n test-id=\"divIconError\"\n onClick={this.onRefocusInput}\n >\n <q2-icon\n type=\"error\"\n class=\"icon-error\"\n test-id=\"iconError\"\n />\n </div>\n )}\n </div>\n {this.pseudo ? this.pseudoInputDOM() : this.standardInputDOM()}\n <div class=\"input-icons-container-right\">\n <q2-btn\n class={this.clearClasses.join(' ')}\n ariaLabel={loc('tecton.element.input.clear', [this.label])}\n test-id=\"clearButton\"\n onClick={this.onClearInput}\n >\n <q2-icon\n type=\"close\"\n class=\"icon-clear\"\n />\n </q2-btn>\n {['password', 'text', 'ssn', 'tin'].includes(this.type) && this.showVisibilityToggle && (\n <q2-btn\n class=\"btn-visibility-toggle\"\n test-id=\"toggleVisibilityButton\"\n onClick={this.onToggleVisibility}\n label={loc(this.visibilityToggleAriaLabel, { label: this.label })}\n hide-label={true}\n >\n {this.visibilityToggleText}\n </q2-btn>\n )}\n {this.formattedValueObject.suffix && (\n <span class=\"input-suffix\">{this.formattedValueObject.suffix}</span>\n )}\n {this.badgeValue && (\n <q2-badge\n size=\"large\"\n theme={this.badgeTheme}\n >\n {this.badgeValue}\n </q2-badge>\n )}\n {this.hasError && this.type !== 'currency' && (\n <div\n test-id=\"divIconError\"\n onClick={this.onRefocusInput}\n >\n <q2-icon\n type=\"error\"\n class=\"icon-error\"\n test-id=\"iconError\"\n />\n </div>\n )}\n {this.iconRight && !this.formattedValueObject.suffix && (\n <div>\n <q2-icon\n type={this.iconRight}\n class=\"icon-right\"\n />\n </div>\n )}\n {hasInputRightSlot && <slot name=\"input-right\" />}\n </div>\n </div>\n );\n }\n\n onClearInput = () => {\n const eventDetail = {\n value: '',\n formattedValue: '',\n minFormattedLength: this.formattedValueObject.minFormattedLength,\n };\n this.input.emit(eventDetail);\n this.change.emit(eventDetail);\n this.clear.emit();\n this.inputField.focus();\n };\n\n onInputBlur = () => {\n this.hasFocus = false;\n setMessageHeight(this);\n if (this.valueOnFocus !== this.formattedValueObject.value) {\n this.valueOnFocus = this.formattedValueObject.value;\n this.change.emit({\n value: this.formattedValueObject.value,\n formattedValue: this.formattedValueObject.fullyFormattedValue,\n minFormattedLength: this.formattedValueObject.minFormattedLength,\n ...(this.formattedValueObject.type && { type: this.formattedValueObject.type }),\n });\n }\n };\n\n onInputClick = () => {\n if (this.shouldCursorStayAtEnd) this.placeCursorAtEnd();\n };\n\n onInputFocus = () => {\n if (this.inputField.tagName === 'INPUT') {\n this.scheduledAfterRender.push(() =>\n this.shouldCursorStartAtEnd\n ? this.placeCursorAtEnd()\n : this.setCursorPosition(this.calculateCursorPositionOnFocus())\n );\n }\n this.hasFocus = true;\n setMessageHeight(this);\n this.valueOnFocus = this.value;\n };\n\n onInputInput = (event: InputEvent) => {\n event.stopPropagation();\n if (this.type === 'currency') this.handleCurrencyDeletion(event);\n const newFormattedValue = this.getFormattedValue((event.target as HTMLInputElement).value, false);\n this.handleDataInput(newFormattedValue);\n this.validateInput();\n };\n\n onInputKeydown = (event: KeyboardEvent) => {\n const keysThatMoveCursor = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End'];\n const { key } = event;\n\n if (this.type === 'currency') this.handleCurrencyKeydown(event);\n if (this.shouldCursorStayAtEnd && keysThatMoveCursor.includes(key)) event.preventDefault();\n if (key === 'Enter' && this.valueOnFocus !== this.formattedValueObject.value) {\n this.valueOnFocus = this.formattedValueObject.value;\n this.change.emit({\n value: this.formattedValueObject.value,\n formattedValue: this.formattedValueObject.fullyFormattedValue,\n minFormattedLength: this.formattedValueObject.minFormattedLength,\n ...(this.formattedValueObject.type && { type: this.formattedValueObject.type }),\n });\n }\n };\n\n onInputPaste = (event: ClipboardEvent) => {\n if (this.type === 'currency') {\n const clipboardData = event.clipboardData.getData('text');\n const newFormattedValue = this.getFormattedValue(clipboardData, true);\n event.preventDefault();\n this.handleDataInput(newFormattedValue);\n }\n };\n\n onMutationObserved = () => {\n // Updating checkSlotCount to force re-render when slot content changes\n this.checkSlotCount = this.checkSlotCount + 1;\n };\n\n onRefocusInput = () => {\n if (this.showMessages) {\n this.inputField.focus();\n setMessageHeight(this);\n }\n };\n\n onToggleVisibility = () => {\n this.hostElement.dispatchEvent(new FocusEvent('focus'));\n this.textHidden = !this.textHidden;\n };\n\n placeCursorAtEnd() {\n const { inputField } = this;\n inputField.selectionStart = inputField.selectionEnd = inputField.value.length;\n }\n\n /* tslint:enable:cyclomatic-complexity */\n\n pseudoInputDOM() {\n const showPlaceholder = !this.value && !!this.placeholder;\n const { ariaOwns, ariaHaspopup, ariaExpanded, ariaActivedescendant } = this.ariaAttributes;\n\n return (\n <div class=\"pseudo-input-container\">\n <button\n class=\"input-field\"\n type=\"button\"\n id={this.inputId}\n aria-describedby={this.inputDescribedBy}\n aria-invalid={`${this.hasError}`}\n aria-owns={ariaOwns}\n aria-haspopup={ariaHaspopup}\n aria-expanded={ariaExpanded}\n aria-activedescendant={ariaActivedescendant}\n role={(this.role && `${this.role}`) || 'textbox'}\n disabled={!!this.disabled}\n test-id=\"q2InputInnerClearButton\"\n onFocus={this.onInputFocus}\n onBlur={this.onInputBlur}\n >\n <div class=\"custom-display-container\">\n <slot name=\"custom-display\">\n <span class={showPlaceholder ? 'placeholder-text' : ''}>\n {showPlaceholder ? this.placeholder : this.value}\n </span>\n </slot>\n </div>\n </button>\n </div>\n );\n }\n\n setCursorPosition(cursorData: ICursorData) {\n if (this.canSetSelection && !cursorData.hasSelection) {\n const input = this.inputField;\n const { valueLength, previousValueLength, startingPosition } = cursorData;\n\n if (this.type === 'currency') {\n if (previousValueLength - valueLength === 1) {\n input.setSelectionRange(startingPosition - 1, startingPosition - 1);\n } else {\n const difference = previousValueLength - valueLength;\n input.setSelectionRange(startingPosition - difference, startingPosition - difference);\n }\n }\n\n if (this.type !== 'currency') {\n const difference = valueLength - previousValueLength;\n // Never allow the cursor to move in reverse\n const newPosition = startingPosition + (difference > 0 ? difference : 0);\n input.setSelectionRange(newPosition, newPosition);\n }\n }\n }\n\n /* tslint:enable:cyclomatic-complexity */\n\n /* tslint:disable:cyclomatic-complexity */\n standardInputDOM() {\n const { hasCustomDisplaySlot } = this;\n const inputClasses = ['input-field'];\n const { ariaOwns, ariaHaspopup, ariaExpanded, ariaActivedescendant } = this.ariaAttributes;\n if (hasCustomDisplaySlot) inputClasses.push('sr');\n return (\n <Fragment>\n {hasCustomDisplaySlot && (\n <div class=\"custom-display-container\">\n <slot name=\"custom-display\"></slot>\n </div>\n )}\n <input\n ref={el => (this.inputRef = el)}\n class={inputClasses.join(' ')}\n id={this.inputId}\n type={this.computedType}\n size={this.formattedValueObject.prefix ? 10 : undefined}\n max={this.max}\n min={this.min}\n step={this.step}\n aria-current={this.current || undefined}\n aria-describedby={this.inputDescribedBy}\n aria-required={`${!this.optional}`}\n aria-invalid={`${this.hasError}`}\n aria-owns={ariaOwns}\n aria-haspopup={ariaHaspopup}\n aria-expanded={ariaExpanded}\n aria-activedescendant={ariaActivedescendant}\n autocomplete={this.computedAutocomplete}\n autocapitalize={this.autocapitalize}\n autocorrect={this.autocorrect === 'on' ? 'on' : 'off'}\n autofocus={this.autofocus}\n placeholder={(this.placeholder && loc(this.placeholder)) || undefined}\n role={this._role}\n test-id=\"inputField\"\n readonly={this.readonly || this._preventEntry}\n disabled={!!this.disabled}\n onFocus={this.onInputFocus}\n onBlur={this.onInputBlur}\n onClick={this.onInputClick}\n onKeyDown={this.onInputKeydown}\n onInput={this.onInputInput}\n onPaste={this.onInputPaste}\n inputmode={this.inputMode}\n pattern={this.pattern || undefined}\n />\n </Fragment>\n );\n }\n\n validateInput = () => {\n this.validity = this.inputRef?.validity;\n if (this.validity?.valid === false) {\n this.invalid.emit();\n }\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <div class={this.wrapperClasses}>\n <div class=\"label-wrapper\">\n {labelDOM(this)}\n {this.countDOM()}\n </div>\n {this.inputContainerDOM()}\n {messagesDOM(this)}\n </div>\n );\n }\n\n // #endregion\n}\n","@import '../../styles/host.scss';\n@import '../../styles/utility.scss';\n@import '../../styles/functions';\n\n:host {\n display: block;\n}\n\n:host([inline]),\n:host([modifiers*='inline']) {\n display: inline-block;\n}\n\n:host([hidden]) {\n display: none;\n}\n\n:host(:not([inline]):not([modifiers*='inline'])) {\n font-size: var-list(var-prefixer(loading-spinner-size), --app-scale-12x, 60px);\n}\n\n.q2-loading-animation {\n height: 1em;\n width: 1em;\n}\n\n@import './spinners/half-circle-spinner.scss';\n@import './skeleton/skeleton.scss';\n","import { Component, Prop, h, ComponentInterface, Element, Watch } from '@stencil/core';\nimport { handleAriaLabel, loc } from 'src/utils';\nimport skeletonShapes from './skeleton/shapes';\n\n@Component({ tag: 'q2-loading', shadow: true, styleUrl: 'q2-loading.scss' })\nexport class Q2Loading implements ComponentInterface {\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n /**\n * Numeric adjustments are available for specific `type` and `shape` combinations.\n * These may impact the number of items, columns, and/or rows that display.\n *\n * When `shape=\"text\"`, `shape=\"detailed-item\"`, or `shape=\"label-value\"`, the `counts` attribute determines the number of rows to display.\n *\n * When `shape=\"table\"`, the `counts` attribute can be used in two ways:\n *\n * 1. `counts=\"CxR\"` = Provides a skeleton table of `C` columns and `R` rows. The default value is `\"5x5\"\n * 2. `counts=\"N\"` - Provides a skeleton table of `N` columns and 5 rows.\n *\n * When `shape=\"form\"`, the `counts` attribute can be used in two ways:\n *\n * 1. `count=\"CxR\" - Provides a skeleton form of `C` columns and `R` rows of fields. The default value is `\"1x1\"`.\n * 2. `count=\"N\"` - Provides a skeleton form of `N` fields stacked in single columns.\n */\n @Prop({ reflect: true })\n counts: string;\n\n /** Styles the component to have a `height` and `width` of `1em`, making it easy to place alongside text. */\n @Prop({ reflect: true })\n inline: boolean;\n\n /**\n * The label that is associated with the component. This is not displayed visually but is presented by screen readers.\n * @localizable\n */\n @Prop({ reflect: true, mutable: true })\n label: string;\n\n /**\n * Visual adjustments available to specific type and shape combinations, written as a hyphen (`-`) separated string.\n *\n * Supported values depend on the type and shape selected, and are listed in detail in the shape sections above.\n */\n @Prop({ reflect: true })\n modifiers: string;\n\n /**\n * The specific visual presentation of a loading element `type`.\n * @snippet\n * // when type=\"spinner\"\n * type ShapeValues = \"half-circle\";\n * // when type=\"skeleton\"\n * type ShapeValues = \"circle | \"rectangle\" | \"text\" | \"table\" | \"field\" | \"form\" | \"detailed-item\" | \"label-value\";\n */\n @Prop({ reflect: true })\n shape: string;\n\n /** The type of loading element to display. */\n @Prop({ reflect: true })\n type: 'spinner' | 'skeleton';\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n handleAriaLabel(this);\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\n }\n\n // #endregion\n // #region Local Methods\n\n get countsArray(): number[] {\n if (this.type !== 'skeleton' || !this.counts) {\n return undefined;\n }\n\n return this.counts.split('x').map(Number);\n }\n\n get loader() {\n const loaderMap = {\n default: this.spinner,\n spinner: this.spinner,\n skeleton: this.skeletonLoader,\n };\n\n return loaderMap[this.type] || loaderMap.default;\n }\n\n get localizedLabel() {\n return loc(this.label || 'tecton.element.loading.ariaLabel');\n }\n\n get modifiersSet(): Set<string> {\n if (this.type !== 'skeleton' || !this.modifiers) {\n return undefined;\n }\n\n return new Set(this.modifiers.split('-'));\n }\n\n get skeletonShape() {\n return skeletonShapes[this.shape]?.(this.countsArray, this.modifiersSet) ?? '';\n }\n\n get spinnerShape() {\n const spinnerMap = {\n default: this.halfCircleSpinner,\n 'half-circle': this.halfCircleSpinner,\n };\n\n return spinnerMap[this.type] || spinnerMap.default;\n }\n\n halfCircleSpinner = () => {\n return (\n <div\n class=\"q2-loading-animation half-circle-spinner\"\n aria-label={this.localizedLabel}\n role=\"status\"\n aria-live=\"polite\"\n >\n <div class=\"circle circle-1\"></div>\n <div class=\"circle circle-2\"></div>\n </div>\n );\n };\n\n skeletonLoader = () => {\n return (\n <div\n class=\"q2-loading-skeleton\"\n aria-label={this.localizedLabel}\n role=\"status\"\n aria-live=\"polite\"\n >\n {this.shape === 'custom' ? <slot /> : this.skeletonShape}\n <div class=\"q2-loading-skeleton-shimmer\"></div>\n </div>\n );\n };\n\n spinner = () => {\n return this.halfCircleSpinner();\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n return this.loader();\n }\n\n // #endregion\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: block;\n position: relative;\n}\n\nbutton {\n cursor: pointer;\n margin: 0;\n}\n\n.tab-container {\n position: relative;\n}\n\nul {\n --comp-container-padding: #{var-list(--tct-scale-1, --app-scale-1x, 5px)\n var-list(--tct-scale-1, --app-scale-1x, 5px) 0};\n padding: var-list(var-prefixer(tab-container-padding), --comp-container-padding);\n margin: var-list(var-prefixer(tab-container-margin), 0);\n display: flex;\n gap: var-list(var-prefixer(tab-gap), --tct-scale-1, --app-scale-1x, 5px);\n list-style: none;\n border-bottom: 1px solid\n var-list(\n var-prefixer(tab-container-border-color),\n --tct-gray-11,\n --t-gray-11,\n --tct-gray-l1,\n --app-gray-l1,\n #cccccc\n );\n overflow-x: auto;\n align-items: center;\n @include hidden-scrollbar();\n\n @media print {\n &.no-print {\n display: none;\n }\n }\n}\n\nli {\n flex: 0 0 auto;\n\n button {\n background: var-list(--tct-tab-inactive-background, var-prefixer(tab-inactive-bg-color), transparent);\n border-width: var-list(var-prefixer(tab-inactive-border-width), unquote('0 0 3px 0'));\n border-color: var-list(var-prefixer(tab-inactive-border-color), transparent);\n border-style: var-list(var-prefixer(tab-inactive-border-style), solid);\n border-radius: var-list(var-prefixer(tab-border-radius), 0);\n width: var-list(var-prefixer(tab-width), 100%);\n text-align: var-list(var-prefixer(tab-text-align), center);\n text-decoration: var-list(var-prefixer(tab-text-decoration), none);\n padding: var-list(var-prefixer(tab-padding), --tct-scale-2, --app-scale-2x, 10px);\n color: var-list(var-prefixer(tab-inactive-color), inherit);\n font-size: var-list(var-prefixer(tab-font-size), 17px);\n display: block;\n transition:\n color var-list(--tct-tween-2, --app-tween-2, unquote('0.4s ease')),\n border-color var-list(--tct-tween-1, --app-tween-1, unquote('0.2s ease'));\n\n :host([type='section']) & {\n --comp-tab-section-padding: #{var-list(--tct-scale-2, --app-scale-2x, 10px)\n var-list(--tct-scale-1, --app-scale-1x, 5px)};\n font-size: var-list(--tct-tab-section-font-size, inherit);\n padding: var-list(var-prefixer(tab-section-padding), --comp-tab-section-padding);\n }\n\n &:hover {\n color: var-list(var-prefixer(tab-hover-color), var-prefixer(tab-active-color), #2e2e2e);\n background: var-list(--tct-tab-hover-background, var-prefixer(tab-hover-bg-color), inherit);\n width: var-list(var-prefixer(tab-hover-width), 100%);\n }\n\n &[aria-selected='true'] {\n color: var-list(var-prefixer(tab-active-color), #2e2e2e);\n border-color: var-list(var-prefixer(tab-active-border-color), currentcolor);\n border-style: var-list(var-prefixer(tab-active-border-style), solid);\n width: var-list(var-prefixer(tab-active-width), 100%);\n background: var-list(--tct-tab-active-background, var-prefixer(tab-active-bg-color), inherit);\n }\n\n :host([color='alt']) & {\n color: var-list(var-prefixer(tab-alt-inactive-color), inherit);\n\n &:hover,\n &[aria-selected='true'] {\n color: var-list(var-prefixer(tab-alt-active-color), inherit);\n }\n }\n\n @media screen and (max-width: 767px) {\n --comp-tab-padding: #{var-list(--tct-scale-2, --app-scale-2x, 10px)\n var-list(--tct-scale-1, --app-scale-1x, 5px)};\n font-size: inherit;\n padding: var-list(var-prefixer(tab-padding), --comp-tab-padding);\n }\n }\n}\n\n.tab-content {\n --comp-tab-content-padding: #{var-list(--tct-scale-2, --app-scale-2x, 10px) 0};\n padding: var-list(\n --tct-tab-container-content-padding,\n var-prefixer(tab-content-padding),\n --comp-tab-content-padding\n );\n background: var-list(--tct-tab-container-content-backgrond, none);\n\n &:focus {\n outline: none;\n box-shadow: none;\n }\n}\n\n.gradient-left,\n.gradient-right {\n z-index: 1;\n position: absolute;\n top: 0;\n height: 100%;\n width: 44px;\n}\n\n.gradient-left {\n background-image: linear-gradient(to left, var(--t-base-a0), var(--t-base-a2) 10%, var(--t-base) 100%);\n left: 0;\n}\n\n.gradient-right {\n background-image: linear-gradient(to right, var(--t-base-a0), var(--t-base-a2) 10%, var(--t-base) 100%);\n right: 0;\n}\n\n.btn-left,\n.btn-right {\n --tct-icon-size: 18px;\n --tct-btn-icon-hover-background: transparent;\n --tct-btn-icon-width: 22px;\n --tct-icon-stroke-primary: #{var-list(var-prefixer(stepper-scroll-arrow-color), --t-text, #4d4d4d)};\n\n position: absolute;\n top: calc(50% - 22px);\n z-index: 2;\n q2-icon {\n --tct-icon-stroke-width: 3;\n }\n}\n\n.btn-left {\n left: 0;\n}\n\n.btn-right {\n right: 0;\n}\n\n.tab-pane-badge {\n display: flex;\n justify-content: space-between;\n align-items: center;\n q2-badge {\n margin-left: 5px;\n margin-right: 5px;\n }\n}\n","import {\n Component,\n ComponentInterface,\n Prop,\n Element,\n Event,\n EventEmitter,\n State,\n Listen,\n Watch,\n h,\n Fragment,\n} from '@stencil/core';\nimport { createGuid, loc, overrideFocus, isEventFromElement } from 'src/utils';\nimport { JSX } from '../../components';\nimport { Q2Badge } from '../q2-badge/q2-badge';\n\ntype TabPane = {\n label: string;\n value: string;\n badgeCount: number;\n badgeDescription: string;\n badgeTheme: Q2Badge['theme'];\n badgeStatus: Q2Badge['status'];\n};\n\n@Component({ tag: 'q2-tab-container', shadow: true, styleUrl: 'q2-tab-container.scss' })\nexport class Q2TabContainer implements ComponentInterface {\n // #region Own Properties\n\n guid: number = createGuid();\n lastScrolled: number = new Date(null).getTime();\n listElement: HTMLUListElement;\n mutationObserver: MutationObserver;\n resizeObserver: ResizeObserver;\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 hasLeft: boolean = false;\n\n @State()\n hasRight: boolean = false;\n\n @State()\n scrollEnabled: boolean = false;\n\n @State()\n showScrollLeft: boolean = false;\n\n @State()\n showScrollRight: boolean = false;\n\n @State()\n tabs: TabPane[];\n\n // #endregion\n // #region Public Property API\n\n /**\n * Controls which variables are used to color the tab controls.\n *\n * - `undefined` (default)\n * - Uses `--t-tab-active` and `--t-tab-inactive`.\n * - `alt`\n * - Uses `--t-tab-alt-active` and `--t-tab-alt-inactive`.\n * - The default fallback for these variables is `inherit`.\n */\n @Prop({ reflect: true })\n color: 'alt' | undefined;\n\n /**\n * Used to establish a relationship between `q2-tab-container` and its associated tab panes.\n * @warning\n * The element can fail if this property is not set. Nested tab containers without the `name` property will not render correctly.\n */\n @Prop({ reflect: true })\n name: string;\n\n /** Controls visibility of tab list in a print view. Tab content will still be visible even if `noPrint` is true. */\n @Prop({ reflect: true })\n noPrint: boolean = false;\n\n /** Determines the font size of the tab controls. */\n @Prop({ reflect: true })\n type: 'main' | 'section';\n\n /** Corresponds to the value of the selected tab pane. */\n @Prop({ reflect: true, mutable: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the selected tab changes.\n * @legacyEvent\n */\n @Event()\n change: EventEmitter<{ value: string }>;\n\n /**\n * Emitted when the component has finished rendering.\n * @private\n */\n @Event()\n settled: EventEmitter<undefined>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.resizeObserver.disconnect();\n this.mutationObserver.disconnect();\n this.resizeObserver = null;\n this.mutationObserver = null;\n }\n\n componentWillLoad() {\n const observer = new MutationObserver(this.updateTabData);\n observer.observe(this.hostElement, { childList: true, attributes: true });\n this.mutationObserver = observer;\n this.resizeObserver = new ResizeObserver(() => this.checkScrollState());\n this.updateTabData();\n }\n\n componentDidLoad() {\n this.resizeObserver?.observe(this.listElement);\n this.checkScrollState();\n overrideFocus(this.hostElement);\n const index = this.tabs.findIndex(el => el.value === this.value);\n this.scheduledAfterRender.push(() => {\n const hasTabs = this.tabs.length > 0;\n if (!hasTabs) return;\n const tab = this.moveToTab(Math.max(index, 0), false);\n this.value = tab.dataset.value;\n });\n }\n\n componentDidRender() {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n this.settled.emit();\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('badge')\n onBadge() {\n this.setTabs();\n }\n\n @Listen('change')\n defaultChangeHandler(event: CustomEvent) {\n if (event.target === this.hostElement && !this.hostElement.onchange) {\n this.value = event.detail.value;\n }\n }\n\n @Listen('focus')\n onFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n const index = this.tabs.findIndex(el => el.value === this.selectedTabValue);\n this.moveToTab(index, true);\n }\n\n @Listen('resize', { target: 'window' })\n onResize() {\n this.checkScrollState();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('name')\n nameObserver() {\n this.updateTabData();\n }\n\n @Watch('value')\n valueObserver() {\n this.updateTabData();\n this.scheduledAfterRender.push(this.resizeIframe);\n const index = this.tabs.findIndex(el => el.value === this.value);\n if (index > -1) {\n this.scheduledAfterRender.push(() => this.moveToTab(index, false));\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get selectedTabValue() {\n return this.value || this.tabPanes[0].value || '';\n }\n\n get tabList() {\n return this.hostElement.shadowRoot.querySelector('.tab-list');\n }\n\n get tabPanes() {\n const tabPanes = this.hostElement.querySelectorAll<HTMLQ2TabPaneElement | HTMLTectonTabPaneElement>(\n 'q2-tab-pane, tecton-tab-pane'\n );\n\n if (tabPanes.length === 0) {\n return [];\n }\n\n return Array.from(tabPanes).filter(pane => pane.name === this.name);\n }\n\n checkScrollState = () => {\n if (!this.listElement) return;\n const { scrollLeft, scrollWidth, clientWidth } = this.listElement;\n this.scrollEnabled = scrollWidth > clientWidth;\n this.showScrollLeft = scrollLeft > 0;\n this.showScrollRight = scrollWidth > Math.ceil(scrollLeft) + clientWidth;\n };\n\n renderTab(tab: TabPane, index: number): JSX.IntrinsicElements {\n const { label, value } = tab;\n const isSelected = this.selectedTabValue === value;\n return (\n <li role=\"presentation\">\n <button\n id={`tab-${this.guid}-${index}`}\n data-value={value}\n test-id=\"tabLink\"\n tabIndex={isSelected ? 0 : -1}\n role=\"tab\"\n aria-selected={isSelected ? 'true' : 'false'}\n onClick={this.onTabClick}\n onKeyDown={this.onTabKeyDown}\n >\n {tab.badgeCount === undefined ? label : this.renderTabWithBadge(tab, isSelected)}\n </button>\n </li>\n );\n }\n\n renderTabWithBadge(tab: TabPane, isSelected: boolean): JSX.IntrinsicElements {\n let theme;\n if (!tab.badgeStatus && isSelected) theme = tab.badgeTheme || 'primary';\n let description;\n if (tab.badgeDescription) description = loc(tab.badgeDescription);\n else if (tab.badgeStatus) description = loc(`tecton.element.tab.pane.${tab.badgeStatus}`, [tab.badgeCount]);\n else description = loc('tecton.element.tab.pane.new');\n\n return (\n <div\n class=\"tab-pane-badge\"\n aria-label={`${tab.label}, ${tab.badgeCount} ${description}`}\n >\n {tab.label}\n <q2-badge\n value={tab.badgeCount}\n theme={theme}\n status={tab.badgeStatus}\n />\n </div>\n );\n }\n\n moveToAdjacentTab = (value: string, direction: 'next' | 'prev' | 'first' | 'last') => {\n const index = this.tabs.map(({ value }) => value).indexOf(value);\n\n let newIndex;\n switch (direction) {\n case 'next':\n newIndex = Math.min(index + 1, this.tabs.length - 1);\n break;\n\n case 'prev':\n newIndex = Math.max(index - 1, 0);\n break;\n\n case 'first':\n newIndex = 0;\n break;\n\n case 'last':\n newIndex = this.tabs.length - 1;\n break;\n }\n\n if (index === newIndex) return;\n\n this.moveToTab(newIndex, true);\n };\n\n moveToTab = (index: number, shouldFocus: boolean = true) => {\n const focusedValue = this.tabs[index].value;\n const focusedTab = this.listElement.querySelector<HTMLButtonElement>(`[data-value=\"${focusedValue}\"]`);\n if (shouldFocus) {\n focusedTab.focus({ preventScroll: true });\n }\n\n const left = focusedTab.offsetLeft - this.listElement.clientWidth / 2;\n this.listElement.scrollTo({\n left,\n behavior: 'smooth',\n });\n\n return focusedTab;\n };\n\n onScrollBtnClick = (direction?: 'left' | 'right') => {\n const { scrollLeft, scrollWidth, clientWidth } = this.listElement;\n const halfWidth = Math.floor(clientWidth / 2);\n let scrollAmount: number = 0;\n if (direction === 'left') {\n scrollAmount = -Math.min(halfWidth, Math.abs(scrollLeft));\n } else {\n scrollAmount = Math.min(halfWidth, Math.abs(scrollWidth - scrollLeft - clientWidth));\n }\n this.listElement.scrollBy({ left: scrollAmount, behavior: 'smooth' });\n };\n\n onSlotChange = () => {\n this.checkScrollState();\n };\n\n onTabClick = (event: MouseEvent) => {\n const targetValue = ((event.target as HTMLButtonElement).closest('button[role=\"tab\"]') as HTMLButtonElement)\n .dataset.value;\n const isAlreadySelected = this.value === targetValue;\n if (isAlreadySelected) return;\n\n this.change.emit({\n value: targetValue,\n });\n };\n\n onTabKeyDown = (event: KeyboardEvent) => {\n const value = (event.target as HTMLElement).dataset.value;\n switch (event.key) {\n case 'ArrowRight':\n event.preventDefault();\n this.moveToAdjacentTab(value, 'next');\n break;\n\n case 'ArrowLeft':\n event.preventDefault();\n this.moveToAdjacentTab(value, 'prev');\n break;\n\n case 'Home':\n event.preventDefault();\n this.moveToAdjacentTab(value, 'first');\n break;\n\n case 'End':\n event.preventDefault();\n this.moveToAdjacentTab(value, 'last');\n break;\n\n case 'Space':\n case 'Enter':\n event.preventDefault();\n this.change.emit({ value });\n break;\n }\n };\n\n resizeIframe() {\n return window.TectonElements?.resizeIframe?.();\n }\n\n setTabs = () => {\n this.tabs = this.tabPanes.map(({ label, value, badgeCount, badgeDescription, badgeTheme, badgeStatus }) => ({\n label: (label && loc(label)) || '',\n value,\n badgeCount,\n badgeDescription,\n badgeTheme,\n badgeStatus,\n }));\n };\n\n updateTabData = () => {\n this.updateTabPaneProps();\n this.setTabs();\n };\n\n updateTabPaneProps = () => {\n this.tabPanes.forEach((tab, index) => {\n tab.selected = tab.value === this.selectedTabValue;\n tab.guid = this.guid;\n tab.index = index;\n });\n };\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <Fragment>\n <div class=\"tab-container\">\n {this.scrollEnabled && (\n <Fragment>\n <div\n class=\"gradient-left\"\n hidden={!this.showScrollLeft}\n ></div>\n <div\n class=\"gradient-right\"\n hidden={!this.showScrollRight}\n ></div>\n\n <q2-btn\n class=\"btn-left\"\n hidden={!this.showScrollLeft}\n onClick={() => this.onScrollBtnClick('left')}\n >\n <q2-icon\n type=\"chevron-left\"\n label=\"scroll left\"\n ></q2-icon>\n </q2-btn>\n\n <q2-btn\n class=\"btn-right\"\n hidden={!this.showScrollRight}\n onClick={() => this.onScrollBtnClick('right')}\n >\n <q2-icon\n type=\"chevron-right\"\n label=\"scroll right\"\n ></q2-icon>\n </q2-btn>\n </Fragment>\n )}\n\n <ul\n onScroll={this.checkScrollState}\n ref={el => (this.listElement = el)}\n class={this.noPrint ? 'no-print' : null}\n role=\"tablist\"\n >\n {this.tabs.map((tab, index) => this.renderTab(tab, index))}\n </ul>\n </div>\n <div class=\"tab-content\">\n <slot onSlotchange={() => this.onSlotChange()} />\n </div>\n </Fragment>\n );\n }\n\n // #endregion\n}\n","@import '../../styles/host.scss';\n\n.tab-pane[aria-hidden='true'] {\n display: none;\n}\n\n.tab-pane:focus {\n outline: none;\n box-shadow: none;\n}\n\n","import { Component, ComponentInterface, Prop, Event, EventEmitter, Watch, h } from '@stencil/core';\nimport { Q2Badge } from '../q2-badge/q2-badge';\n\n@Component({ tag: 'q2-tab-pane', shadow: true, styleUrl: 'q2-tab-pane.scss' })\nexport class Q2TabPane implements ComponentInterface {\n // #region Public Property API\n\n /** Adds a `q2-badge` component with the number provided right next to the tab pane label. */\n @Prop({ reflect: true })\n badgeCount: number;\n\n /**\n * The text that will be pronounced alongside `badgeCount` when the screen reader presents the tab.\n * @localizable\n */\n @Prop({ reflect: true })\n badgeDescription: string;\n\n /** Allows you to specify the status of the tab, which is always visible. */\n @Prop({ reflect: true })\n badgeStatus: Q2Badge['status'];\n\n /** Allows you to specify the color of the badge when the tab is active. */\n @Prop({ reflect: true })\n badgeTheme: Q2Badge['theme'];\n\n /**\n * Used by q2-tab-container to apply a unique id to each tab pane\n * @private\n */\n @Prop()\n guid: number;\n\n /**\n * Used by q2-tab-container to indicate the pane's index\n * @private\n */\n @Prop()\n index: number;\n\n /**\n * Serves as the text that will be visible in the tab control provided by `q2-tab-container`.\n * @localizable\n */\n @Prop({ reflect: true })\n label: string;\n\n /**\n * Used by q2-tab-container to apply a name to all options in the group\n * @private\n */\n @Prop({ reflect: true })\n name: string;\n\n /**\n * Used by q2-tab-container to indicate the option is selected\n * @private\n */\n @Prop({ reflect: true })\n selected: boolean;\n\n /** Serves as the pane's value. Should correspond to the `q2-tab-container` value. */\n @Prop({ reflect: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the badge count, description, theme, or status changes.\n * @private\n */\n @Event({ bubbles: true })\n badge: EventEmitter<boolean>;\n\n // #endregion\n // #region Watchers\n\n @Watch('badgeCount')\n @Watch('badgeDescription')\n @Watch('badgeTheme')\n @Watch('badgeStatus')\n badgeObserver() {\n this.badge.emit();\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <div\n id={`tab-pane-${this.guid}-${this.index}`}\n class={`tab-pane${this.selected ? '' : ' hidden'}`}\n role=\"tabpanel\"\n tabindex=\"-1\"\n aria-hidden={`${!this.selected}`}\n aria-labelledby={`tab-${this.guid}-${this.index}`}\n >\n <slot />\n </div>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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"}