@futdevpro/dynamo-e2e 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (472) hide show
  1. package/.c8rc.json +25 -0
  2. package/.dynamo/pipeline.cicd.config.json +137 -0
  3. package/.dynamo/version-bump.config.json +5 -0
  4. package/.github/workflows/main.yml +29 -0
  5. package/BUILD.md +36 -0
  6. package/README.md +68 -0
  7. package/bin/dye2e.js +72 -0
  8. package/build/_modules/contracts/_collections/constants/cwv-default-thresholds.const.d.ts +10 -0
  9. package/build/_modules/contracts/_collections/constants/cwv-default-thresholds.const.d.ts.map +1 -0
  10. package/build/_modules/contracts/_collections/constants/cwv-default-thresholds.const.js +24 -0
  11. package/build/_modules/contracts/_collections/constants/cwv-default-thresholds.const.js.map +1 -0
  12. package/build/_modules/contracts/_collections/constants/standard-viewports.const.d.ts +9 -0
  13. package/build/_modules/contracts/_collections/constants/standard-viewports.const.d.ts.map +1 -0
  14. package/build/_modules/contracts/_collections/constants/standard-viewports.const.js +75 -0
  15. package/build/_modules/contracts/_collections/constants/standard-viewports.const.js.map +1 -0
  16. package/build/_modules/contracts/_collections/index.d.ts +5 -0
  17. package/build/_modules/contracts/_collections/index.d.ts.map +1 -0
  18. package/build/_modules/contracts/_collections/index.js +21 -0
  19. package/build/_modules/contracts/_collections/index.js.map +1 -0
  20. package/build/_modules/contracts/_collections/test-case-sets/checkbox-field-test-cases.const.d.ts +3 -0
  21. package/build/_modules/contracts/_collections/test-case-sets/checkbox-field-test-cases.const.d.ts.map +1 -0
  22. package/build/_modules/contracts/_collections/test-case-sets/checkbox-field-test-cases.const.js +52 -0
  23. package/build/_modules/contracts/_collections/test-case-sets/checkbox-field-test-cases.const.js.map +1 -0
  24. package/build/_modules/contracts/_collections/test-case-sets/date-field-test-cases.const.d.ts +8 -0
  25. package/build/_modules/contracts/_collections/test-case-sets/date-field-test-cases.const.d.ts.map +1 -0
  26. package/build/_modules/contracts/_collections/test-case-sets/date-field-test-cases.const.js +120 -0
  27. package/build/_modules/contracts/_collections/test-case-sets/date-field-test-cases.const.js.map +1 -0
  28. package/build/_modules/contracts/_collections/test-case-sets/field-type-registry.const.d.ts +18 -0
  29. package/build/_modules/contracts/_collections/test-case-sets/field-type-registry.const.d.ts.map +1 -0
  30. package/build/_modules/contracts/_collections/test-case-sets/field-type-registry.const.js +49 -0
  31. package/build/_modules/contracts/_collections/test-case-sets/field-type-registry.const.js.map +1 -0
  32. package/build/_modules/contracts/_collections/test-case-sets/index.d.ts +10 -0
  33. package/build/_modules/contracts/_collections/test-case-sets/index.d.ts.map +1 -0
  34. package/build/_modules/contracts/_collections/test-case-sets/index.js +26 -0
  35. package/build/_modules/contracts/_collections/test-case-sets/index.js.map +1 -0
  36. package/build/_modules/contracts/_collections/test-case-sets/multiselect-field-test-cases.const.d.ts +6 -0
  37. package/build/_modules/contracts/_collections/test-case-sets/multiselect-field-test-cases.const.d.ts.map +1 -0
  38. package/build/_modules/contracts/_collections/test-case-sets/multiselect-field-test-cases.const.js +53 -0
  39. package/build/_modules/contracts/_collections/test-case-sets/multiselect-field-test-cases.const.js.map +1 -0
  40. package/build/_modules/contracts/_collections/test-case-sets/number-field-test-cases.const.d.ts +10 -0
  41. package/build/_modules/contracts/_collections/test-case-sets/number-field-test-cases.const.d.ts.map +1 -0
  42. package/build/_modules/contracts/_collections/test-case-sets/number-field-test-cases.const.js +102 -0
  43. package/build/_modules/contracts/_collections/test-case-sets/number-field-test-cases.const.js.map +1 -0
  44. package/build/_modules/contracts/_collections/test-case-sets/password-field-test-cases.const.d.ts +7 -0
  45. package/build/_modules/contracts/_collections/test-case-sets/password-field-test-cases.const.d.ts.map +1 -0
  46. package/build/_modules/contracts/_collections/test-case-sets/password-field-test-cases.const.js +85 -0
  47. package/build/_modules/contracts/_collections/test-case-sets/password-field-test-cases.const.js.map +1 -0
  48. package/build/_modules/contracts/_collections/test-case-sets/select-field-test-cases.const.d.ts +7 -0
  49. package/build/_modules/contracts/_collections/test-case-sets/select-field-test-cases.const.d.ts.map +1 -0
  50. package/build/_modules/contracts/_collections/test-case-sets/select-field-test-cases.const.js +57 -0
  51. package/build/_modules/contracts/_collections/test-case-sets/select-field-test-cases.const.js.map +1 -0
  52. package/build/_modules/contracts/_collections/test-case-sets/slider-field-test-cases.const.d.ts +7 -0
  53. package/build/_modules/contracts/_collections/test-case-sets/slider-field-test-cases.const.d.ts.map +1 -0
  54. package/build/_modules/contracts/_collections/test-case-sets/slider-field-test-cases.const.js +67 -0
  55. package/build/_modules/contracts/_collections/test-case-sets/slider-field-test-cases.const.js.map +1 -0
  56. package/build/_modules/contracts/_collections/test-case-sets/text-field-test-cases.const.d.ts +10 -0
  57. package/build/_modules/contracts/_collections/test-case-sets/text-field-test-cases.const.d.ts.map +1 -0
  58. package/build/_modules/contracts/_collections/test-case-sets/text-field-test-cases.const.js +0 -0
  59. package/build/_modules/contracts/_collections/test-case-sets/text-field-test-cases.const.js.map +1 -0
  60. package/build/_modules/contracts/_collections/test-case-sets/textarea-field-test-cases.const.d.ts +3 -0
  61. package/build/_modules/contracts/_collections/test-case-sets/textarea-field-test-cases.const.d.ts.map +1 -0
  62. package/build/_modules/contracts/_collections/test-case-sets/textarea-field-test-cases.const.js +58 -0
  63. package/build/_modules/contracts/_collections/test-case-sets/textarea-field-test-cases.const.js.map +1 -0
  64. package/build/_modules/contracts/_collections/utils/test-id.util.d.ts +13 -0
  65. package/build/_modules/contracts/_collections/utils/test-id.util.d.ts.map +1 -0
  66. package/build/_modules/contracts/_collections/utils/test-id.util.js +30 -0
  67. package/build/_modules/contracts/_collections/utils/test-id.util.js.map +1 -0
  68. package/build/_modules/contracts/_enums/cwv-metric-type.enum.d.ts +21 -0
  69. package/build/_modules/contracts/_enums/cwv-metric-type.enum.d.ts.map +1 -0
  70. package/build/_modules/contracts/_enums/cwv-metric-type.enum.js +25 -0
  71. package/build/_modules/contracts/_enums/cwv-metric-type.enum.js.map +1 -0
  72. package/build/_modules/contracts/_enums/field-test-case-type.enum.d.ts +83 -0
  73. package/build/_modules/contracts/_enums/field-test-case-type.enum.d.ts.map +1 -0
  74. package/build/_modules/contracts/_enums/field-test-case-type.enum.js +98 -0
  75. package/build/_modules/contracts/_enums/field-test-case-type.enum.js.map +1 -0
  76. package/build/_modules/contracts/_enums/index.d.ts +6 -0
  77. package/build/_modules/contracts/_enums/index.d.ts.map +1 -0
  78. package/build/_modules/contracts/_enums/index.js +22 -0
  79. package/build/_modules/contracts/_enums/index.js.map +1 -0
  80. package/build/_modules/contracts/_enums/standard-viewport.enum.d.ts +15 -0
  81. package/build/_modules/contracts/_enums/standard-viewport.enum.d.ts.map +1 -0
  82. package/build/_modules/contracts/_enums/standard-viewport.enum.js +19 -0
  83. package/build/_modules/contracts/_enums/standard-viewport.enum.js.map +1 -0
  84. package/build/_modules/contracts/_enums/test-expectation-type.enum.d.ts +17 -0
  85. package/build/_modules/contracts/_enums/test-expectation-type.enum.d.ts.map +1 -0
  86. package/build/_modules/contracts/_enums/test-expectation-type.enum.js +21 -0
  87. package/build/_modules/contracts/_enums/test-expectation-type.enum.js.map +1 -0
  88. package/build/_modules/contracts/_enums/test-run-mode-type.enum.d.ts +16 -0
  89. package/build/_modules/contracts/_enums/test-run-mode-type.enum.d.ts.map +1 -0
  90. package/build/_modules/contracts/_enums/test-run-mode-type.enum.js +20 -0
  91. package/build/_modules/contracts/_enums/test-run-mode-type.enum.js.map +1 -0
  92. package/build/_modules/contracts/_models/data-models/field-test-case-set.data-model.d.ts +19 -0
  93. package/build/_modules/contracts/_models/data-models/field-test-case-set.data-model.d.ts.map +1 -0
  94. package/build/_modules/contracts/_models/data-models/field-test-case-set.data-model.js +24 -0
  95. package/build/_modules/contracts/_models/data-models/field-test-case-set.data-model.js.map +1 -0
  96. package/build/_modules/contracts/_models/data-models/field-test-case.data-model.d.ts +37 -0
  97. package/build/_modules/contracts/_models/data-models/field-test-case.data-model.d.ts.map +1 -0
  98. package/build/_modules/contracts/_models/data-models/field-test-case.data-model.js +43 -0
  99. package/build/_modules/contracts/_models/data-models/field-test-case.data-model.js.map +1 -0
  100. package/build/_modules/contracts/_models/data-models/index.d.ts +3 -0
  101. package/build/_modules/contracts/_models/data-models/index.d.ts.map +1 -0
  102. package/build/_modules/contracts/_models/data-models/index.js +19 -0
  103. package/build/_modules/contracts/_models/data-models/index.js.map +1 -0
  104. package/build/_modules/contracts/_models/interfaces/cwv-thresholds.interface.d.ts +16 -0
  105. package/build/_modules/contracts/_models/interfaces/cwv-thresholds.interface.d.ts.map +1 -0
  106. package/build/_modules/contracts/_models/interfaces/cwv-thresholds.interface.js +3 -0
  107. package/build/_modules/contracts/_models/interfaces/cwv-thresholds.interface.js.map +1 -0
  108. package/build/_modules/contracts/_models/interfaces/form-test-suite-settings.interface.d.ts +45 -0
  109. package/build/_modules/contracts/_models/interfaces/form-test-suite-settings.interface.d.ts.map +1 -0
  110. package/build/_modules/contracts/_models/interfaces/form-test-suite-settings.interface.js +3 -0
  111. package/build/_modules/contracts/_models/interfaces/form-test-suite-settings.interface.js.map +1 -0
  112. package/build/_modules/contracts/_models/interfaces/index.d.ts +4 -0
  113. package/build/_modules/contracts/_models/interfaces/index.d.ts.map +1 -0
  114. package/build/_modules/contracts/_models/interfaces/index.js +20 -0
  115. package/build/_modules/contracts/_models/interfaces/index.js.map +1 -0
  116. package/build/_modules/contracts/_models/interfaces/viewport.interface.d.ts +16 -0
  117. package/build/_modules/contracts/_models/interfaces/viewport.interface.d.ts.map +1 -0
  118. package/build/_modules/contracts/_models/interfaces/viewport.interface.js +3 -0
  119. package/build/_modules/contracts/_models/interfaces/viewport.interface.js.map +1 -0
  120. package/build/_modules/contracts/contracts.spec.d.ts +2 -0
  121. package/build/_modules/contracts/contracts.spec.d.ts.map +1 -0
  122. package/build/_modules/contracts/contracts.spec.js +144 -0
  123. package/build/_modules/contracts/contracts.spec.js.map +1 -0
  124. package/build/_modules/contracts/index.d.ts +6 -0
  125. package/build/_modules/contracts/index.d.ts.map +1 -0
  126. package/build/_modules/contracts/index.js +26 -0
  127. package/build/_modules/contracts/index.js.map +1 -0
  128. package/build/_modules/cwv/_collections/cwv-aggregator.util.d.ts +23 -0
  129. package/build/_modules/cwv/_collections/cwv-aggregator.util.d.ts.map +1 -0
  130. package/build/_modules/cwv/_collections/cwv-aggregator.util.js +50 -0
  131. package/build/_modules/cwv/_collections/cwv-aggregator.util.js.map +1 -0
  132. package/build/_modules/cwv/_collections/cwv-emission.util.d.ts +18 -0
  133. package/build/_modules/cwv/_collections/cwv-emission.util.d.ts.map +1 -0
  134. package/build/_modules/cwv/_collections/cwv-emission.util.js +95 -0
  135. package/build/_modules/cwv/_collections/cwv-emission.util.js.map +1 -0
  136. package/build/_modules/cwv/_collections/web-vitals-page-script.const.d.ts +11 -0
  137. package/build/_modules/cwv/_collections/web-vitals-page-script.const.d.ts.map +1 -0
  138. package/build/_modules/cwv/_collections/web-vitals-page-script.const.js +86 -0
  139. package/build/_modules/cwv/_collections/web-vitals-page-script.const.js.map +1 -0
  140. package/build/_modules/cwv/_models/cwv-measurement.data-model.d.ts +22 -0
  141. package/build/_modules/cwv/_models/cwv-measurement.data-model.d.ts.map +1 -0
  142. package/build/_modules/cwv/_models/cwv-measurement.data-model.js +28 -0
  143. package/build/_modules/cwv/_models/cwv-measurement.data-model.js.map +1 -0
  144. package/build/_modules/cwv/_models/cwv-suite-generate-options.interface.d.ts +22 -0
  145. package/build/_modules/cwv/_models/cwv-suite-generate-options.interface.d.ts.map +1 -0
  146. package/build/_modules/cwv/_models/cwv-suite-generate-options.interface.js +3 -0
  147. package/build/_modules/cwv/_models/cwv-suite-generate-options.interface.js.map +1 -0
  148. package/build/_modules/cwv/_models/index.d.ts +3 -0
  149. package/build/_modules/cwv/_models/index.d.ts.map +1 -0
  150. package/build/_modules/cwv/_models/index.js +19 -0
  151. package/build/_modules/cwv/_models/index.js.map +1 -0
  152. package/build/_modules/cwv/cwv-suite.generator.d.ts +13 -0
  153. package/build/_modules/cwv/cwv-suite.generator.d.ts.map +1 -0
  154. package/build/_modules/cwv/cwv-suite.generator.js +38 -0
  155. package/build/_modules/cwv/cwv-suite.generator.js.map +1 -0
  156. package/build/_modules/cwv/cwv-suite.generator.spec.d.ts +2 -0
  157. package/build/_modules/cwv/cwv-suite.generator.spec.d.ts.map +1 -0
  158. package/build/_modules/cwv/cwv-suite.generator.spec.js +81 -0
  159. package/build/_modules/cwv/cwv-suite.generator.spec.js.map +1 -0
  160. package/build/_modules/cwv/index.d.ts +10 -0
  161. package/build/_modules/cwv/index.d.ts.map +1 -0
  162. package/build/_modules/cwv/index.js +27 -0
  163. package/build/_modules/cwv/index.js.map +1 -0
  164. package/build/_modules/generators/_collections/cli-runner.util.d.ts +20 -0
  165. package/build/_modules/generators/_collections/cli-runner.util.d.ts.map +1 -0
  166. package/build/_modules/generators/_collections/cli-runner.util.js +87 -0
  167. package/build/_modules/generators/_collections/cli-runner.util.js.map +1 -0
  168. package/build/_modules/generators/_collections/field-emission.util.d.ts +24 -0
  169. package/build/_modules/generators/_collections/field-emission.util.d.ts.map +1 -0
  170. package/build/_modules/generators/_collections/field-emission.util.js +102 -0
  171. package/build/_modules/generators/_collections/field-emission.util.js.map +1 -0
  172. package/build/_modules/generators/_collections/form-level-emission.util.d.ts +12 -0
  173. package/build/_modules/generators/_collections/form-level-emission.util.d.ts.map +1 -0
  174. package/build/_modules/generators/_collections/form-level-emission.util.js +43 -0
  175. package/build/_modules/generators/_collections/form-level-emission.util.js.map +1 -0
  176. package/build/_modules/generators/_collections/spec-emission.util.d.ts +21 -0
  177. package/build/_modules/generators/_collections/spec-emission.util.d.ts.map +1 -0
  178. package/build/_modules/generators/_collections/spec-emission.util.js +71 -0
  179. package/build/_modules/generators/_collections/spec-emission.util.js.map +1 -0
  180. package/build/_modules/generators/_collections/test-case-filter.util.d.ts +25 -0
  181. package/build/_modules/generators/_collections/test-case-filter.util.d.ts.map +1 -0
  182. package/build/_modules/generators/_collections/test-case-filter.util.js +127 -0
  183. package/build/_modules/generators/_collections/test-case-filter.util.js.map +1 -0
  184. package/build/_modules/generators/_collections/viewport-emission.util.d.ts +23 -0
  185. package/build/_modules/generators/_collections/viewport-emission.util.d.ts.map +1 -0
  186. package/build/_modules/generators/_collections/viewport-emission.util.js +61 -0
  187. package/build/_modules/generators/_collections/viewport-emission.util.js.map +1 -0
  188. package/build/_modules/generators/_models/form-settings-shape.interface.d.ts +59 -0
  189. package/build/_modules/generators/_models/form-settings-shape.interface.d.ts.map +1 -0
  190. package/build/_modules/generators/_models/form-settings-shape.interface.js +11 -0
  191. package/build/_modules/generators/_models/form-settings-shape.interface.js.map +1 -0
  192. package/build/_modules/generators/_models/form-suite-generate-options.interface.d.ts +23 -0
  193. package/build/_modules/generators/_models/form-suite-generate-options.interface.d.ts.map +1 -0
  194. package/build/_modules/generators/_models/form-suite-generate-options.interface.js +3 -0
  195. package/build/_modules/generators/_models/form-suite-generate-options.interface.js.map +1 -0
  196. package/build/_modules/generators/_models/index.d.ts +5 -0
  197. package/build/_modules/generators/_models/index.d.ts.map +1 -0
  198. package/build/_modules/generators/_models/index.js +21 -0
  199. package/build/_modules/generators/_models/index.js.map +1 -0
  200. package/build/_modules/generators/_models/route-descriptor.interface.d.ts +18 -0
  201. package/build/_modules/generators/_models/route-descriptor.interface.d.ts.map +1 -0
  202. package/build/_modules/generators/_models/route-descriptor.interface.js +3 -0
  203. package/build/_modules/generators/_models/route-descriptor.interface.js.map +1 -0
  204. package/build/_modules/generators/_models/viewport-suite-generate-options.interface.d.ts +36 -0
  205. package/build/_modules/generators/_models/viewport-suite-generate-options.interface.d.ts.map +1 -0
  206. package/build/_modules/generators/_models/viewport-suite-generate-options.interface.js +3 -0
  207. package/build/_modules/generators/_models/viewport-suite-generate-options.interface.js.map +1 -0
  208. package/build/_modules/generators/cli-runner.spec.d.ts +2 -0
  209. package/build/_modules/generators/cli-runner.spec.d.ts.map +1 -0
  210. package/build/_modules/generators/cli-runner.spec.js +93 -0
  211. package/build/_modules/generators/cli-runner.spec.js.map +1 -0
  212. package/build/_modules/generators/field-emission-edge.spec.d.ts +2 -0
  213. package/build/_modules/generators/field-emission-edge.spec.d.ts.map +1 -0
  214. package/build/_modules/generators/field-emission-edge.spec.js +115 -0
  215. package/build/_modules/generators/field-emission-edge.spec.js.map +1 -0
  216. package/build/_modules/generators/form-suite.generator.d.ts +24 -0
  217. package/build/_modules/generators/form-suite.generator.d.ts.map +1 -0
  218. package/build/_modules/generators/form-suite.generator.js +87 -0
  219. package/build/_modules/generators/form-suite.generator.js.map +1 -0
  220. package/build/_modules/generators/form-suite.generator.spec.d.ts +2 -0
  221. package/build/_modules/generators/form-suite.generator.spec.d.ts.map +1 -0
  222. package/build/_modules/generators/form-suite.generator.spec.js +144 -0
  223. package/build/_modules/generators/form-suite.generator.spec.js.map +1 -0
  224. package/build/_modules/generators/index.d.ts +10 -0
  225. package/build/_modules/generators/index.d.ts.map +1 -0
  226. package/build/_modules/generators/index.js +26 -0
  227. package/build/_modules/generators/index.js.map +1 -0
  228. package/build/_modules/generators/test-case-filter-edge.spec.d.ts +2 -0
  229. package/build/_modules/generators/test-case-filter-edge.spec.d.ts.map +1 -0
  230. package/build/_modules/generators/test-case-filter-edge.spec.js +72 -0
  231. package/build/_modules/generators/test-case-filter-edge.spec.js.map +1 -0
  232. package/build/_modules/generators/viewport-suite.generator.d.ts +21 -0
  233. package/build/_modules/generators/viewport-suite.generator.d.ts.map +1 -0
  234. package/build/_modules/generators/viewport-suite.generator.js +64 -0
  235. package/build/_modules/generators/viewport-suite.generator.js.map +1 -0
  236. package/build/_modules/generators/viewport-suite.generator.spec.d.ts +2 -0
  237. package/build/_modules/generators/viewport-suite.generator.spec.d.ts.map +1 -0
  238. package/build/_modules/generators/viewport-suite.generator.spec.js +59 -0
  239. package/build/_modules/generators/viewport-suite.generator.spec.js.map +1 -0
  240. package/build/_modules/presets/index.d.ts +14 -0
  241. package/build/_modules/presets/index.d.ts.map +1 -0
  242. package/build/_modules/presets/index.js +17 -0
  243. package/build/_modules/presets/index.js.map +1 -0
  244. package/build/_modules/runtime/_collections/assertion-helpers.util.d.ts +20 -0
  245. package/build/_modules/runtime/_collections/assertion-helpers.util.d.ts.map +1 -0
  246. package/build/_modules/runtime/_collections/assertion-helpers.util.js +39 -0
  247. package/build/_modules/runtime/_collections/assertion-helpers.util.js.map +1 -0
  248. package/build/_modules/runtime/_collections/unique-generator.util.d.ts +36 -0
  249. package/build/_modules/runtime/_collections/unique-generator.util.d.ts.map +1 -0
  250. package/build/_modules/runtime/_collections/unique-generator.util.js +57 -0
  251. package/build/_modules/runtime/_collections/unique-generator.util.js.map +1 -0
  252. package/build/_modules/runtime/_collections/wait-helpers.util.d.ts +18 -0
  253. package/build/_modules/runtime/_collections/wait-helpers.util.d.ts.map +1 -0
  254. package/build/_modules/runtime/_collections/wait-helpers.util.js +52 -0
  255. package/build/_modules/runtime/_collections/wait-helpers.util.js.map +1 -0
  256. package/build/_modules/runtime/_models/env-config.interface.d.ts +22 -0
  257. package/build/_modules/runtime/_models/env-config.interface.d.ts.map +1 -0
  258. package/build/_modules/runtime/_models/env-config.interface.js +20 -0
  259. package/build/_modules/runtime/_models/env-config.interface.js.map +1 -0
  260. package/build/_modules/runtime/_models/index.d.ts +2 -0
  261. package/build/_modules/runtime/_models/index.d.ts.map +1 -0
  262. package/build/_modules/runtime/_models/index.js +18 -0
  263. package/build/_modules/runtime/_models/index.js.map +1 -0
  264. package/build/_modules/runtime/_models/test-user.interface.d.ts +19 -0
  265. package/build/_modules/runtime/_models/test-user.interface.d.ts.map +1 -0
  266. package/build/_modules/runtime/_models/test-user.interface.js +3 -0
  267. package/build/_modules/runtime/_models/test-user.interface.js.map +1 -0
  268. package/build/_modules/runtime/_services/dialog-page-object.d.ts +13 -0
  269. package/build/_modules/runtime/_services/dialog-page-object.d.ts.map +1 -0
  270. package/build/_modules/runtime/_services/dialog-page-object.js +26 -0
  271. package/build/_modules/runtime/_services/dialog-page-object.js.map +1 -0
  272. package/build/_modules/runtime/_services/field-page-object.d.ts +23 -0
  273. package/build/_modules/runtime/_services/field-page-object.d.ts.map +1 -0
  274. package/build/_modules/runtime/_services/field-page-object.js +55 -0
  275. package/build/_modules/runtime/_services/field-page-object.js.map +1 -0
  276. package/build/_modules/runtime/_services/form-page-object.d.ts +16 -0
  277. package/build/_modules/runtime/_services/form-page-object.d.ts.map +1 -0
  278. package/build/_modules/runtime/_services/form-page-object.js +33 -0
  279. package/build/_modules/runtime/_services/form-page-object.js.map +1 -0
  280. package/build/_modules/runtime/_services/loader-page-object.d.ts +10 -0
  281. package/build/_modules/runtime/_services/loader-page-object.d.ts.map +1 -0
  282. package/build/_modules/runtime/_services/loader-page-object.js +24 -0
  283. package/build/_modules/runtime/_services/loader-page-object.js.map +1 -0
  284. package/build/_modules/runtime/_services/logger.service.d.ts +36 -0
  285. package/build/_modules/runtime/_services/logger.service.d.ts.map +1 -0
  286. package/build/_modules/runtime/_services/logger.service.js +68 -0
  287. package/build/_modules/runtime/_services/logger.service.js.map +1 -0
  288. package/build/_modules/runtime/_services/login-flow-helper.base.d.ts +51 -0
  289. package/build/_modules/runtime/_services/login-flow-helper.base.d.ts.map +1 -0
  290. package/build/_modules/runtime/_services/login-flow-helper.base.js +48 -0
  291. package/build/_modules/runtime/_services/login-flow-helper.base.js.map +1 -0
  292. package/build/_modules/runtime/_services/nav-page-object.d.ts +12 -0
  293. package/build/_modules/runtime/_services/nav-page-object.d.ts.map +1 -0
  294. package/build/_modules/runtime/_services/nav-page-object.js +23 -0
  295. package/build/_modules/runtime/_services/nav-page-object.js.map +1 -0
  296. package/build/_modules/runtime/_services/toast-page-object.d.ts +9 -0
  297. package/build/_modules/runtime/_services/toast-page-object.d.ts.map +1 -0
  298. package/build/_modules/runtime/_services/toast-page-object.js +19 -0
  299. package/build/_modules/runtime/_services/toast-page-object.js.map +1 -0
  300. package/build/_modules/runtime/assertion-helpers.spec.d.ts +2 -0
  301. package/build/_modules/runtime/assertion-helpers.spec.d.ts.map +1 -0
  302. package/build/_modules/runtime/assertion-helpers.spec.js +57 -0
  303. package/build/_modules/runtime/assertion-helpers.spec.js.map +1 -0
  304. package/build/_modules/runtime/fixtures.d.ts +32 -0
  305. package/build/_modules/runtime/fixtures.d.ts.map +1 -0
  306. package/build/_modules/runtime/fixtures.js +37 -0
  307. package/build/_modules/runtime/fixtures.js.map +1 -0
  308. package/build/_modules/runtime/index.d.ts +30 -0
  309. package/build/_modules/runtime/index.d.ts.map +1 -0
  310. package/build/_modules/runtime/index.js +47 -0
  311. package/build/_modules/runtime/index.js.map +1 -0
  312. package/build/_modules/runtime/logger.service.spec.d.ts +2 -0
  313. package/build/_modules/runtime/logger.service.spec.d.ts.map +1 -0
  314. package/build/_modules/runtime/logger.service.spec.js +61 -0
  315. package/build/_modules/runtime/logger.service.spec.js.map +1 -0
  316. package/build/_modules/runtime/login-flow-helper.spec.d.ts +2 -0
  317. package/build/_modules/runtime/login-flow-helper.spec.d.ts.map +1 -0
  318. package/build/_modules/runtime/login-flow-helper.spec.js +74 -0
  319. package/build/_modules/runtime/login-flow-helper.spec.js.map +1 -0
  320. package/build/_modules/runtime/page-objects.spec.d.ts +2 -0
  321. package/build/_modules/runtime/page-objects.spec.d.ts.map +1 -0
  322. package/build/_modules/runtime/page-objects.spec.js +241 -0
  323. package/build/_modules/runtime/page-objects.spec.js.map +1 -0
  324. package/build/_modules/runtime/runtime.spec.d.ts +2 -0
  325. package/build/_modules/runtime/runtime.spec.d.ts.map +1 -0
  326. package/build/_modules/runtime/runtime.spec.js +73 -0
  327. package/build/_modules/runtime/runtime.spec.js.map +1 -0
  328. package/build/_modules/runtime/unique-generator.spec.d.ts +2 -0
  329. package/build/_modules/runtime/unique-generator.spec.d.ts.map +1 -0
  330. package/build/_modules/runtime/unique-generator.spec.js +41 -0
  331. package/build/_modules/runtime/unique-generator.spec.js.map +1 -0
  332. package/build/index.d.ts +8 -0
  333. package/build/index.d.ts.map +1 -0
  334. package/build/index.js +26 -0
  335. package/build/index.js.map +1 -0
  336. package/coverage/base.css +224 -0
  337. package/coverage/block-navigation.js +87 -0
  338. package/coverage/contracts/_collections/index.html +116 -0
  339. package/coverage/contracts/_collections/index.ts.html +97 -0
  340. package/coverage/contracts/_collections/utils/index.html +116 -0
  341. package/coverage/contracts/_collections/utils/test-id.util.ts.html +172 -0
  342. package/coverage/contracts/_enums/cwv-metric-type.enum.ts.html +145 -0
  343. package/coverage/contracts/_enums/field-test-case-type.enum.ts.html +394 -0
  344. package/coverage/contracts/_enums/index.html +191 -0
  345. package/coverage/contracts/_enums/index.ts.html +100 -0
  346. package/coverage/contracts/_enums/standard-viewport.enum.ts.html +127 -0
  347. package/coverage/contracts/_enums/test-expectation-type.enum.ts.html +133 -0
  348. package/coverage/contracts/_enums/test-run-mode-type.enum.ts.html +130 -0
  349. package/coverage/contracts/index.html +116 -0
  350. package/coverage/contracts/index.ts.html +121 -0
  351. package/coverage/cwv/_collections/cwv-aggregator.util.ts.html +241 -0
  352. package/coverage/cwv/_collections/cwv-emission.util.ts.html +394 -0
  353. package/coverage/cwv/_collections/index.html +146 -0
  354. package/coverage/cwv/_collections/web-vitals-page-script.const.ts.html +331 -0
  355. package/coverage/cwv/cwv-suite.generator.ts.html +232 -0
  356. package/coverage/cwv/index.html +116 -0
  357. package/coverage/favicon.png +0 -0
  358. package/coverage/generators/_collections/cli-runner.util.ts.html +361 -0
  359. package/coverage/generators/_collections/field-emission.util.ts.html +478 -0
  360. package/coverage/generators/_collections/form-level-emission.util.ts.html +220 -0
  361. package/coverage/generators/_collections/index.html +191 -0
  362. package/coverage/generators/_collections/spec-emission.util.ts.html +298 -0
  363. package/coverage/generators/_collections/test-case-filter.util.ts.html +523 -0
  364. package/coverage/generators/_collections/viewport-emission.util.ts.html +313 -0
  365. package/coverage/generators/form-suite.generator.ts.html +406 -0
  366. package/coverage/generators/index.html +131 -0
  367. package/coverage/generators/viewport-suite.generator.ts.html +307 -0
  368. package/coverage/index.html +266 -0
  369. package/coverage/lcov-report/base.css +224 -0
  370. package/coverage/lcov-report/block-navigation.js +87 -0
  371. package/coverage/lcov-report/contracts/_collections/index.html +116 -0
  372. package/coverage/lcov-report/contracts/_collections/index.ts.html +97 -0
  373. package/coverage/lcov-report/contracts/_collections/utils/index.html +116 -0
  374. package/coverage/lcov-report/contracts/_collections/utils/test-id.util.ts.html +172 -0
  375. package/coverage/lcov-report/contracts/_enums/cwv-metric-type.enum.ts.html +145 -0
  376. package/coverage/lcov-report/contracts/_enums/field-test-case-type.enum.ts.html +394 -0
  377. package/coverage/lcov-report/contracts/_enums/index.html +191 -0
  378. package/coverage/lcov-report/contracts/_enums/index.ts.html +100 -0
  379. package/coverage/lcov-report/contracts/_enums/standard-viewport.enum.ts.html +127 -0
  380. package/coverage/lcov-report/contracts/_enums/test-expectation-type.enum.ts.html +133 -0
  381. package/coverage/lcov-report/contracts/_enums/test-run-mode-type.enum.ts.html +130 -0
  382. package/coverage/lcov-report/contracts/index.html +116 -0
  383. package/coverage/lcov-report/contracts/index.ts.html +121 -0
  384. package/coverage/lcov-report/cwv/_collections/cwv-aggregator.util.ts.html +241 -0
  385. package/coverage/lcov-report/cwv/_collections/cwv-emission.util.ts.html +394 -0
  386. package/coverage/lcov-report/cwv/_collections/index.html +146 -0
  387. package/coverage/lcov-report/cwv/_collections/web-vitals-page-script.const.ts.html +331 -0
  388. package/coverage/lcov-report/cwv/cwv-suite.generator.ts.html +232 -0
  389. package/coverage/lcov-report/cwv/index.html +116 -0
  390. package/coverage/lcov-report/favicon.png +0 -0
  391. package/coverage/lcov-report/generators/_collections/cli-runner.util.ts.html +361 -0
  392. package/coverage/lcov-report/generators/_collections/field-emission.util.ts.html +478 -0
  393. package/coverage/lcov-report/generators/_collections/form-level-emission.util.ts.html +220 -0
  394. package/coverage/lcov-report/generators/_collections/index.html +191 -0
  395. package/coverage/lcov-report/generators/_collections/spec-emission.util.ts.html +298 -0
  396. package/coverage/lcov-report/generators/_collections/test-case-filter.util.ts.html +523 -0
  397. package/coverage/lcov-report/generators/_collections/viewport-emission.util.ts.html +313 -0
  398. package/coverage/lcov-report/generators/form-suite.generator.ts.html +406 -0
  399. package/coverage/lcov-report/generators/index.html +131 -0
  400. package/coverage/lcov-report/generators/viewport-suite.generator.ts.html +307 -0
  401. package/coverage/lcov-report/index.html +266 -0
  402. package/coverage/lcov-report/prettify.css +1 -0
  403. package/coverage/lcov-report/prettify.js +2 -0
  404. package/coverage/lcov-report/runtime/_collections/assertion-helpers.util.ts.html +205 -0
  405. package/coverage/lcov-report/runtime/_collections/index.html +146 -0
  406. package/coverage/lcov-report/runtime/_collections/unique-generator.util.ts.html +256 -0
  407. package/coverage/lcov-report/runtime/_collections/wait-helpers.util.ts.html +238 -0
  408. package/coverage/lcov-report/runtime/_services/dialog-page-object.ts.html +157 -0
  409. package/coverage/lcov-report/runtime/_services/field-page-object.ts.html +253 -0
  410. package/coverage/lcov-report/runtime/_services/form-page-object.ts.html +184 -0
  411. package/coverage/lcov-report/runtime/_services/index.html +221 -0
  412. package/coverage/lcov-report/runtime/_services/loader-page-object.ts.html +142 -0
  413. package/coverage/lcov-report/runtime/_services/logger.service.ts.html +385 -0
  414. package/coverage/lcov-report/runtime/_services/login-flow-helper.base.ts.html +331 -0
  415. package/coverage/lcov-report/runtime/_services/nav-page-object.ts.html +145 -0
  416. package/coverage/lcov-report/runtime/_services/toast-page-object.ts.html +130 -0
  417. package/coverage/lcov-report/runtime/index.html +116 -0
  418. package/coverage/lcov-report/runtime/index.ts.html +175 -0
  419. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  420. package/coverage/lcov-report/sorter.js +210 -0
  421. package/coverage/lcov.info +2527 -0
  422. package/coverage/prettify.css +1 -0
  423. package/coverage/prettify.js +2 -0
  424. package/coverage/runtime/_collections/assertion-helpers.util.ts.html +205 -0
  425. package/coverage/runtime/_collections/index.html +146 -0
  426. package/coverage/runtime/_collections/unique-generator.util.ts.html +256 -0
  427. package/coverage/runtime/_collections/wait-helpers.util.ts.html +238 -0
  428. package/coverage/runtime/_services/dialog-page-object.ts.html +157 -0
  429. package/coverage/runtime/_services/field-page-object.ts.html +253 -0
  430. package/coverage/runtime/_services/form-page-object.ts.html +184 -0
  431. package/coverage/runtime/_services/index.html +221 -0
  432. package/coverage/runtime/_services/loader-page-object.ts.html +142 -0
  433. package/coverage/runtime/_services/logger.service.ts.html +385 -0
  434. package/coverage/runtime/_services/login-flow-helper.base.ts.html +331 -0
  435. package/coverage/runtime/_services/nav-page-object.ts.html +145 -0
  436. package/coverage/runtime/_services/toast-page-object.ts.html +130 -0
  437. package/coverage/runtime/index.html +116 -0
  438. package/coverage/runtime/index.ts.html +175 -0
  439. package/coverage/sort-arrow-sprite.png +0 -0
  440. package/coverage/sorter.js +210 -0
  441. package/coverage/tmp/coverage-215876-1781064798541-0.json +1 -0
  442. package/coverage/tmp/coverage-223792-1781064800382-0.json +1 -0
  443. package/dogfood/PARITY-MATRIX.md +67 -0
  444. package/dogfood/generated/date-range-field-new.spec.ts +54 -0
  445. package/dogfood/generated/password-field-new.spec.ts +97 -0
  446. package/dogfood/generated/radio-select-field-new.spec.ts +69 -0
  447. package/dogfood/generated/slider-field-new.spec.ts +47 -0
  448. package/dogfood/generated/text-field-new.spec.ts +0 -0
  449. package/dogfood/generated-full/checkbox-field-new.spec.ts +56 -0
  450. package/dogfood/generated-full/date-field-new.spec.ts +71 -0
  451. package/dogfood/generated-full/date-range-field-new.spec.ts +54 -0
  452. package/dogfood/generated-full/datetime-field-new.spec.ts +55 -0
  453. package/dogfood/generated-full/multiselect-field-new.spec.ts +69 -0
  454. package/dogfood/generated-full/number-field-new.spec.ts +113 -0
  455. package/dogfood/generated-full/password-field-new.spec.ts +97 -0
  456. package/dogfood/generated-full/radio-select-field-new.spec.ts +69 -0
  457. package/dogfood/generated-full/sandbox-viewport-audit.spec.ts +4643 -0
  458. package/dogfood/generated-full/select-field-new.spec.ts +69 -0
  459. package/dogfood/generated-full/slider-field-new.spec.ts +47 -0
  460. package/dogfood/generated-full/slider-range-field-new.spec.ts +54 -0
  461. package/dogfood/generated-full/text-field-new.spec.ts +0 -0
  462. package/dogfood/generated-full/textarea-field-new.spec.ts +72 -0
  463. package/dogfood/sandbox-bootstrap-full.js +248 -0
  464. package/dogfood/sandbox-bootstrap.js +170 -0
  465. package/examples/minimal-form/README.md +55 -0
  466. package/examples/minimal-form/form-config.json +38 -0
  467. package/examples/multi-form-app/README.md +63 -0
  468. package/examples/multi-form-app/cwv-config.json +14 -0
  469. package/examples/multi-form-app/settings/login-form.json +11 -0
  470. package/examples/multi-form-app/settings/profile-form.json +25 -0
  471. package/examples/multi-form-app/viewport-config.json +12 -0
  472. package/package.json +103 -0
@@ -0,0 +1,4643 @@
1
+ /**
2
+ * Auto-generated by @futdevpro/dynamo-e2e — FormSuite Generator
3
+ * Form key: viewport-audit
4
+ * Route: /c/text-field-new, /c/textarea-field-new, /c/number-field-new, /c/password-field-new, /c/slider-field-new, /c/slider-range-field-new, /c/checkbox-field-new, /c/select-field-new, /c/multiselect-field-new, /c/radio-select-field-new, /c/date-field-new, /c/datetime-field-new, /c/date-range-field-new
5
+ * Built at: WAVE-2-STAMP
6
+ *
7
+ * DO NOT EDIT BY HAND. Re-emit via `dc e2e generate-form-suite` or
8
+ * `DyE2E_FormSuite_Generator.emit({...})` consumer-script.
9
+ */
10
+
11
+ import { test, expect } from '@playwright/test';
12
+
13
+ test.describe('Sandbox viewport audit', (): void => {
14
+
15
+ test.describe('Route: Sandbox text-field-new (/c/text-field-new)', (): void => {
16
+ test('text-field-new × mobile-s × dark', async ({ page }): Promise<void> => {
17
+ await page.setViewportSize({ width: 320, height: 568 });
18
+ const response = await page.goto('/c/text-field-new');
19
+ expect(response?.ok()).toBeTruthy();
20
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
21
+ await page.waitForLoadState('networkidle');
22
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
23
+ scrollWidth: document.documentElement.scrollWidth,
24
+ innerWidth: window.innerWidth,
25
+ }));
26
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
27
+
28
+ const tooSmall = await page.evaluate((minPx: number): number => {
29
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
30
+ let undersize: number = 0;
31
+ tappable.forEach((el: HTMLElement): void => {
32
+ const rect = el.getBoundingClientRect();
33
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
34
+ undersize++;
35
+ }
36
+ });
37
+ return undersize;
38
+ }, 44);
39
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
40
+
41
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/text-field-new/mobile-s-dark.png', fullPage: true });
42
+
43
+ });
44
+
45
+ test('text-field-new × mobile-s × light', async ({ page }): Promise<void> => {
46
+ await page.setViewportSize({ width: 320, height: 568 });
47
+ const response = await page.goto('/c/text-field-new');
48
+ expect(response?.ok()).toBeTruthy();
49
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
50
+ await page.waitForLoadState('networkidle');
51
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
52
+ scrollWidth: document.documentElement.scrollWidth,
53
+ innerWidth: window.innerWidth,
54
+ }));
55
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
56
+
57
+ const tooSmall = await page.evaluate((minPx: number): number => {
58
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
59
+ let undersize: number = 0;
60
+ tappable.forEach((el: HTMLElement): void => {
61
+ const rect = el.getBoundingClientRect();
62
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
63
+ undersize++;
64
+ }
65
+ });
66
+ return undersize;
67
+ }, 44);
68
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
69
+
70
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/text-field-new/mobile-s-light.png', fullPage: true });
71
+
72
+ });
73
+
74
+ test('text-field-new × mobile-m × dark', async ({ page }): Promise<void> => {
75
+ await page.setViewportSize({ width: 375, height: 667 });
76
+ const response = await page.goto('/c/text-field-new');
77
+ expect(response?.ok()).toBeTruthy();
78
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
79
+ await page.waitForLoadState('networkidle');
80
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
81
+ scrollWidth: document.documentElement.scrollWidth,
82
+ innerWidth: window.innerWidth,
83
+ }));
84
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
85
+
86
+ const tooSmall = await page.evaluate((minPx: number): number => {
87
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
88
+ let undersize: number = 0;
89
+ tappable.forEach((el: HTMLElement): void => {
90
+ const rect = el.getBoundingClientRect();
91
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
92
+ undersize++;
93
+ }
94
+ });
95
+ return undersize;
96
+ }, 44);
97
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
98
+
99
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/text-field-new/mobile-m-dark.png', fullPage: true });
100
+
101
+ });
102
+
103
+ test('text-field-new × mobile-m × light', async ({ page }): Promise<void> => {
104
+ await page.setViewportSize({ width: 375, height: 667 });
105
+ const response = await page.goto('/c/text-field-new');
106
+ expect(response?.ok()).toBeTruthy();
107
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
108
+ await page.waitForLoadState('networkidle');
109
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
110
+ scrollWidth: document.documentElement.scrollWidth,
111
+ innerWidth: window.innerWidth,
112
+ }));
113
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
114
+
115
+ const tooSmall = await page.evaluate((minPx: number): number => {
116
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
117
+ let undersize: number = 0;
118
+ tappable.forEach((el: HTMLElement): void => {
119
+ const rect = el.getBoundingClientRect();
120
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
121
+ undersize++;
122
+ }
123
+ });
124
+ return undersize;
125
+ }, 44);
126
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
127
+
128
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/text-field-new/mobile-m-light.png', fullPage: true });
129
+
130
+ });
131
+
132
+ test('text-field-new × mobile-l × dark', async ({ page }): Promise<void> => {
133
+ await page.setViewportSize({ width: 414, height: 896 });
134
+ const response = await page.goto('/c/text-field-new');
135
+ expect(response?.ok()).toBeTruthy();
136
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
137
+ await page.waitForLoadState('networkidle');
138
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
139
+ scrollWidth: document.documentElement.scrollWidth,
140
+ innerWidth: window.innerWidth,
141
+ }));
142
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
143
+
144
+ const tooSmall = await page.evaluate((minPx: number): number => {
145
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
146
+ let undersize: number = 0;
147
+ tappable.forEach((el: HTMLElement): void => {
148
+ const rect = el.getBoundingClientRect();
149
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
150
+ undersize++;
151
+ }
152
+ });
153
+ return undersize;
154
+ }, 44);
155
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
156
+
157
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/text-field-new/mobile-l-dark.png', fullPage: true });
158
+
159
+ });
160
+
161
+ test('text-field-new × mobile-l × light', async ({ page }): Promise<void> => {
162
+ await page.setViewportSize({ width: 414, height: 896 });
163
+ const response = await page.goto('/c/text-field-new');
164
+ expect(response?.ok()).toBeTruthy();
165
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
166
+ await page.waitForLoadState('networkidle');
167
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
168
+ scrollWidth: document.documentElement.scrollWidth,
169
+ innerWidth: window.innerWidth,
170
+ }));
171
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
172
+
173
+ const tooSmall = await page.evaluate((minPx: number): number => {
174
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
175
+ let undersize: number = 0;
176
+ tappable.forEach((el: HTMLElement): void => {
177
+ const rect = el.getBoundingClientRect();
178
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
179
+ undersize++;
180
+ }
181
+ });
182
+ return undersize;
183
+ }, 44);
184
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
185
+
186
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/text-field-new/mobile-l-light.png', fullPage: true });
187
+
188
+ });
189
+
190
+ test('text-field-new × tablet-p × dark', async ({ page }): Promise<void> => {
191
+ await page.setViewportSize({ width: 768, height: 1024 });
192
+ const response = await page.goto('/c/text-field-new');
193
+ expect(response?.ok()).toBeTruthy();
194
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
195
+ await page.waitForLoadState('networkidle');
196
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
197
+ scrollWidth: document.documentElement.scrollWidth,
198
+ innerWidth: window.innerWidth,
199
+ }));
200
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
201
+
202
+ const tooSmall = await page.evaluate((minPx: number): number => {
203
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
204
+ let undersize: number = 0;
205
+ tappable.forEach((el: HTMLElement): void => {
206
+ const rect = el.getBoundingClientRect();
207
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
208
+ undersize++;
209
+ }
210
+ });
211
+ return undersize;
212
+ }, 44);
213
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
214
+
215
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/text-field-new/tablet-p-dark.png', fullPage: true });
216
+
217
+ });
218
+
219
+ test('text-field-new × tablet-p × light', async ({ page }): Promise<void> => {
220
+ await page.setViewportSize({ width: 768, height: 1024 });
221
+ const response = await page.goto('/c/text-field-new');
222
+ expect(response?.ok()).toBeTruthy();
223
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
224
+ await page.waitForLoadState('networkidle');
225
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
226
+ scrollWidth: document.documentElement.scrollWidth,
227
+ innerWidth: window.innerWidth,
228
+ }));
229
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
230
+
231
+ const tooSmall = await page.evaluate((minPx: number): number => {
232
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
233
+ let undersize: number = 0;
234
+ tappable.forEach((el: HTMLElement): void => {
235
+ const rect = el.getBoundingClientRect();
236
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
237
+ undersize++;
238
+ }
239
+ });
240
+ return undersize;
241
+ }, 44);
242
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
243
+
244
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/text-field-new/tablet-p-light.png', fullPage: true });
245
+
246
+ });
247
+
248
+ test('text-field-new × tablet-l × dark', async ({ page }): Promise<void> => {
249
+ await page.setViewportSize({ width: 1024, height: 768 });
250
+ const response = await page.goto('/c/text-field-new');
251
+ expect(response?.ok()).toBeTruthy();
252
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
253
+ await page.waitForLoadState('networkidle');
254
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
255
+ scrollWidth: document.documentElement.scrollWidth,
256
+ innerWidth: window.innerWidth,
257
+ }));
258
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
259
+
260
+ const tooSmall = await page.evaluate((minPx: number): number => {
261
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
262
+ let undersize: number = 0;
263
+ tappable.forEach((el: HTMLElement): void => {
264
+ const rect = el.getBoundingClientRect();
265
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
266
+ undersize++;
267
+ }
268
+ });
269
+ return undersize;
270
+ }, 44);
271
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
272
+
273
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/text-field-new/tablet-l-dark.png', fullPage: true });
274
+
275
+ });
276
+
277
+ test('text-field-new × tablet-l × light', async ({ page }): Promise<void> => {
278
+ await page.setViewportSize({ width: 1024, height: 768 });
279
+ const response = await page.goto('/c/text-field-new');
280
+ expect(response?.ok()).toBeTruthy();
281
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
282
+ await page.waitForLoadState('networkidle');
283
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
284
+ scrollWidth: document.documentElement.scrollWidth,
285
+ innerWidth: window.innerWidth,
286
+ }));
287
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
288
+
289
+ const tooSmall = await page.evaluate((minPx: number): number => {
290
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
291
+ let undersize: number = 0;
292
+ tappable.forEach((el: HTMLElement): void => {
293
+ const rect = el.getBoundingClientRect();
294
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
295
+ undersize++;
296
+ }
297
+ });
298
+ return undersize;
299
+ }, 44);
300
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
301
+
302
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/text-field-new/tablet-l-light.png', fullPage: true });
303
+
304
+ });
305
+
306
+ test('text-field-new × desktop × dark', async ({ page }): Promise<void> => {
307
+ await page.setViewportSize({ width: 1440, height: 900 });
308
+ const response = await page.goto('/c/text-field-new');
309
+ expect(response?.ok()).toBeTruthy();
310
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
311
+ await page.waitForLoadState('networkidle');
312
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
313
+ scrollWidth: document.documentElement.scrollWidth,
314
+ innerWidth: window.innerWidth,
315
+ }));
316
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
317
+
318
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/text-field-new/desktop-dark.png', fullPage: true });
319
+
320
+ });
321
+
322
+ test('text-field-new × desktop × light', async ({ page }): Promise<void> => {
323
+ await page.setViewportSize({ width: 1440, height: 900 });
324
+ const response = await page.goto('/c/text-field-new');
325
+ expect(response?.ok()).toBeTruthy();
326
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
327
+ await page.waitForLoadState('networkidle');
328
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
329
+ scrollWidth: document.documentElement.scrollWidth,
330
+ innerWidth: window.innerWidth,
331
+ }));
332
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
333
+
334
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/text-field-new/desktop-light.png', fullPage: true });
335
+
336
+ });
337
+
338
+ test('text-field-new × desktop-wide × dark', async ({ page }): Promise<void> => {
339
+ await page.setViewportSize({ width: 1920, height: 1080 });
340
+ const response = await page.goto('/c/text-field-new');
341
+ expect(response?.ok()).toBeTruthy();
342
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
343
+ await page.waitForLoadState('networkidle');
344
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
345
+ scrollWidth: document.documentElement.scrollWidth,
346
+ innerWidth: window.innerWidth,
347
+ }));
348
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
349
+
350
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/text-field-new/desktop-wide-dark.png', fullPage: true });
351
+
352
+ });
353
+
354
+ test('text-field-new × desktop-wide × light', async ({ page }): Promise<void> => {
355
+ await page.setViewportSize({ width: 1920, height: 1080 });
356
+ const response = await page.goto('/c/text-field-new');
357
+ expect(response?.ok()).toBeTruthy();
358
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
359
+ await page.waitForLoadState('networkidle');
360
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
361
+ scrollWidth: document.documentElement.scrollWidth,
362
+ innerWidth: window.innerWidth,
363
+ }));
364
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
365
+
366
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/text-field-new/desktop-wide-light.png', fullPage: true });
367
+
368
+ });
369
+ });
370
+
371
+ test.describe('Route: Sandbox textarea-field-new (/c/textarea-field-new)', (): void => {
372
+ test('textarea-field-new × mobile-s × dark', async ({ page }): Promise<void> => {
373
+ await page.setViewportSize({ width: 320, height: 568 });
374
+ const response = await page.goto('/c/textarea-field-new');
375
+ expect(response?.ok()).toBeTruthy();
376
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
377
+ await page.waitForLoadState('networkidle');
378
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
379
+ scrollWidth: document.documentElement.scrollWidth,
380
+ innerWidth: window.innerWidth,
381
+ }));
382
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
383
+
384
+ const tooSmall = await page.evaluate((minPx: number): number => {
385
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
386
+ let undersize: number = 0;
387
+ tappable.forEach((el: HTMLElement): void => {
388
+ const rect = el.getBoundingClientRect();
389
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
390
+ undersize++;
391
+ }
392
+ });
393
+ return undersize;
394
+ }, 44);
395
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
396
+
397
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/textarea-field-new/mobile-s-dark.png', fullPage: true });
398
+
399
+ });
400
+
401
+ test('textarea-field-new × mobile-s × light', async ({ page }): Promise<void> => {
402
+ await page.setViewportSize({ width: 320, height: 568 });
403
+ const response = await page.goto('/c/textarea-field-new');
404
+ expect(response?.ok()).toBeTruthy();
405
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
406
+ await page.waitForLoadState('networkidle');
407
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
408
+ scrollWidth: document.documentElement.scrollWidth,
409
+ innerWidth: window.innerWidth,
410
+ }));
411
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
412
+
413
+ const tooSmall = await page.evaluate((minPx: number): number => {
414
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
415
+ let undersize: number = 0;
416
+ tappable.forEach((el: HTMLElement): void => {
417
+ const rect = el.getBoundingClientRect();
418
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
419
+ undersize++;
420
+ }
421
+ });
422
+ return undersize;
423
+ }, 44);
424
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
425
+
426
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/textarea-field-new/mobile-s-light.png', fullPage: true });
427
+
428
+ });
429
+
430
+ test('textarea-field-new × mobile-m × dark', async ({ page }): Promise<void> => {
431
+ await page.setViewportSize({ width: 375, height: 667 });
432
+ const response = await page.goto('/c/textarea-field-new');
433
+ expect(response?.ok()).toBeTruthy();
434
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
435
+ await page.waitForLoadState('networkidle');
436
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
437
+ scrollWidth: document.documentElement.scrollWidth,
438
+ innerWidth: window.innerWidth,
439
+ }));
440
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
441
+
442
+ const tooSmall = await page.evaluate((minPx: number): number => {
443
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
444
+ let undersize: number = 0;
445
+ tappable.forEach((el: HTMLElement): void => {
446
+ const rect = el.getBoundingClientRect();
447
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
448
+ undersize++;
449
+ }
450
+ });
451
+ return undersize;
452
+ }, 44);
453
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
454
+
455
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/textarea-field-new/mobile-m-dark.png', fullPage: true });
456
+
457
+ });
458
+
459
+ test('textarea-field-new × mobile-m × light', async ({ page }): Promise<void> => {
460
+ await page.setViewportSize({ width: 375, height: 667 });
461
+ const response = await page.goto('/c/textarea-field-new');
462
+ expect(response?.ok()).toBeTruthy();
463
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
464
+ await page.waitForLoadState('networkidle');
465
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
466
+ scrollWidth: document.documentElement.scrollWidth,
467
+ innerWidth: window.innerWidth,
468
+ }));
469
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
470
+
471
+ const tooSmall = await page.evaluate((minPx: number): number => {
472
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
473
+ let undersize: number = 0;
474
+ tappable.forEach((el: HTMLElement): void => {
475
+ const rect = el.getBoundingClientRect();
476
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
477
+ undersize++;
478
+ }
479
+ });
480
+ return undersize;
481
+ }, 44);
482
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
483
+
484
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/textarea-field-new/mobile-m-light.png', fullPage: true });
485
+
486
+ });
487
+
488
+ test('textarea-field-new × mobile-l × dark', async ({ page }): Promise<void> => {
489
+ await page.setViewportSize({ width: 414, height: 896 });
490
+ const response = await page.goto('/c/textarea-field-new');
491
+ expect(response?.ok()).toBeTruthy();
492
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
493
+ await page.waitForLoadState('networkidle');
494
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
495
+ scrollWidth: document.documentElement.scrollWidth,
496
+ innerWidth: window.innerWidth,
497
+ }));
498
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
499
+
500
+ const tooSmall = await page.evaluate((minPx: number): number => {
501
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
502
+ let undersize: number = 0;
503
+ tappable.forEach((el: HTMLElement): void => {
504
+ const rect = el.getBoundingClientRect();
505
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
506
+ undersize++;
507
+ }
508
+ });
509
+ return undersize;
510
+ }, 44);
511
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
512
+
513
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/textarea-field-new/mobile-l-dark.png', fullPage: true });
514
+
515
+ });
516
+
517
+ test('textarea-field-new × mobile-l × light', async ({ page }): Promise<void> => {
518
+ await page.setViewportSize({ width: 414, height: 896 });
519
+ const response = await page.goto('/c/textarea-field-new');
520
+ expect(response?.ok()).toBeTruthy();
521
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
522
+ await page.waitForLoadState('networkidle');
523
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
524
+ scrollWidth: document.documentElement.scrollWidth,
525
+ innerWidth: window.innerWidth,
526
+ }));
527
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
528
+
529
+ const tooSmall = await page.evaluate((minPx: number): number => {
530
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
531
+ let undersize: number = 0;
532
+ tappable.forEach((el: HTMLElement): void => {
533
+ const rect = el.getBoundingClientRect();
534
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
535
+ undersize++;
536
+ }
537
+ });
538
+ return undersize;
539
+ }, 44);
540
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
541
+
542
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/textarea-field-new/mobile-l-light.png', fullPage: true });
543
+
544
+ });
545
+
546
+ test('textarea-field-new × tablet-p × dark', async ({ page }): Promise<void> => {
547
+ await page.setViewportSize({ width: 768, height: 1024 });
548
+ const response = await page.goto('/c/textarea-field-new');
549
+ expect(response?.ok()).toBeTruthy();
550
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
551
+ await page.waitForLoadState('networkidle');
552
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
553
+ scrollWidth: document.documentElement.scrollWidth,
554
+ innerWidth: window.innerWidth,
555
+ }));
556
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
557
+
558
+ const tooSmall = await page.evaluate((minPx: number): number => {
559
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
560
+ let undersize: number = 0;
561
+ tappable.forEach((el: HTMLElement): void => {
562
+ const rect = el.getBoundingClientRect();
563
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
564
+ undersize++;
565
+ }
566
+ });
567
+ return undersize;
568
+ }, 44);
569
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
570
+
571
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/textarea-field-new/tablet-p-dark.png', fullPage: true });
572
+
573
+ });
574
+
575
+ test('textarea-field-new × tablet-p × light', async ({ page }): Promise<void> => {
576
+ await page.setViewportSize({ width: 768, height: 1024 });
577
+ const response = await page.goto('/c/textarea-field-new');
578
+ expect(response?.ok()).toBeTruthy();
579
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
580
+ await page.waitForLoadState('networkidle');
581
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
582
+ scrollWidth: document.documentElement.scrollWidth,
583
+ innerWidth: window.innerWidth,
584
+ }));
585
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
586
+
587
+ const tooSmall = await page.evaluate((minPx: number): number => {
588
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
589
+ let undersize: number = 0;
590
+ tappable.forEach((el: HTMLElement): void => {
591
+ const rect = el.getBoundingClientRect();
592
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
593
+ undersize++;
594
+ }
595
+ });
596
+ return undersize;
597
+ }, 44);
598
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
599
+
600
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/textarea-field-new/tablet-p-light.png', fullPage: true });
601
+
602
+ });
603
+
604
+ test('textarea-field-new × tablet-l × dark', async ({ page }): Promise<void> => {
605
+ await page.setViewportSize({ width: 1024, height: 768 });
606
+ const response = await page.goto('/c/textarea-field-new');
607
+ expect(response?.ok()).toBeTruthy();
608
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
609
+ await page.waitForLoadState('networkidle');
610
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
611
+ scrollWidth: document.documentElement.scrollWidth,
612
+ innerWidth: window.innerWidth,
613
+ }));
614
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
615
+
616
+ const tooSmall = await page.evaluate((minPx: number): number => {
617
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
618
+ let undersize: number = 0;
619
+ tappable.forEach((el: HTMLElement): void => {
620
+ const rect = el.getBoundingClientRect();
621
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
622
+ undersize++;
623
+ }
624
+ });
625
+ return undersize;
626
+ }, 44);
627
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
628
+
629
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/textarea-field-new/tablet-l-dark.png', fullPage: true });
630
+
631
+ });
632
+
633
+ test('textarea-field-new × tablet-l × light', async ({ page }): Promise<void> => {
634
+ await page.setViewportSize({ width: 1024, height: 768 });
635
+ const response = await page.goto('/c/textarea-field-new');
636
+ expect(response?.ok()).toBeTruthy();
637
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
638
+ await page.waitForLoadState('networkidle');
639
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
640
+ scrollWidth: document.documentElement.scrollWidth,
641
+ innerWidth: window.innerWidth,
642
+ }));
643
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
644
+
645
+ const tooSmall = await page.evaluate((minPx: number): number => {
646
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
647
+ let undersize: number = 0;
648
+ tappable.forEach((el: HTMLElement): void => {
649
+ const rect = el.getBoundingClientRect();
650
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
651
+ undersize++;
652
+ }
653
+ });
654
+ return undersize;
655
+ }, 44);
656
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
657
+
658
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/textarea-field-new/tablet-l-light.png', fullPage: true });
659
+
660
+ });
661
+
662
+ test('textarea-field-new × desktop × dark', async ({ page }): Promise<void> => {
663
+ await page.setViewportSize({ width: 1440, height: 900 });
664
+ const response = await page.goto('/c/textarea-field-new');
665
+ expect(response?.ok()).toBeTruthy();
666
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
667
+ await page.waitForLoadState('networkidle');
668
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
669
+ scrollWidth: document.documentElement.scrollWidth,
670
+ innerWidth: window.innerWidth,
671
+ }));
672
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
673
+
674
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/textarea-field-new/desktop-dark.png', fullPage: true });
675
+
676
+ });
677
+
678
+ test('textarea-field-new × desktop × light', async ({ page }): Promise<void> => {
679
+ await page.setViewportSize({ width: 1440, height: 900 });
680
+ const response = await page.goto('/c/textarea-field-new');
681
+ expect(response?.ok()).toBeTruthy();
682
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
683
+ await page.waitForLoadState('networkidle');
684
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
685
+ scrollWidth: document.documentElement.scrollWidth,
686
+ innerWidth: window.innerWidth,
687
+ }));
688
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
689
+
690
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/textarea-field-new/desktop-light.png', fullPage: true });
691
+
692
+ });
693
+
694
+ test('textarea-field-new × desktop-wide × dark', async ({ page }): Promise<void> => {
695
+ await page.setViewportSize({ width: 1920, height: 1080 });
696
+ const response = await page.goto('/c/textarea-field-new');
697
+ expect(response?.ok()).toBeTruthy();
698
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
699
+ await page.waitForLoadState('networkidle');
700
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
701
+ scrollWidth: document.documentElement.scrollWidth,
702
+ innerWidth: window.innerWidth,
703
+ }));
704
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
705
+
706
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/textarea-field-new/desktop-wide-dark.png', fullPage: true });
707
+
708
+ });
709
+
710
+ test('textarea-field-new × desktop-wide × light', async ({ page }): Promise<void> => {
711
+ await page.setViewportSize({ width: 1920, height: 1080 });
712
+ const response = await page.goto('/c/textarea-field-new');
713
+ expect(response?.ok()).toBeTruthy();
714
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
715
+ await page.waitForLoadState('networkidle');
716
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
717
+ scrollWidth: document.documentElement.scrollWidth,
718
+ innerWidth: window.innerWidth,
719
+ }));
720
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
721
+
722
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/textarea-field-new/desktop-wide-light.png', fullPage: true });
723
+
724
+ });
725
+ });
726
+
727
+ test.describe('Route: Sandbox number-field-new (/c/number-field-new)', (): void => {
728
+ test('number-field-new × mobile-s × dark', async ({ page }): Promise<void> => {
729
+ await page.setViewportSize({ width: 320, height: 568 });
730
+ const response = await page.goto('/c/number-field-new');
731
+ expect(response?.ok()).toBeTruthy();
732
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
733
+ await page.waitForLoadState('networkidle');
734
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
735
+ scrollWidth: document.documentElement.scrollWidth,
736
+ innerWidth: window.innerWidth,
737
+ }));
738
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
739
+
740
+ const tooSmall = await page.evaluate((minPx: number): number => {
741
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
742
+ let undersize: number = 0;
743
+ tappable.forEach((el: HTMLElement): void => {
744
+ const rect = el.getBoundingClientRect();
745
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
746
+ undersize++;
747
+ }
748
+ });
749
+ return undersize;
750
+ }, 44);
751
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
752
+
753
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/number-field-new/mobile-s-dark.png', fullPage: true });
754
+
755
+ });
756
+
757
+ test('number-field-new × mobile-s × light', async ({ page }): Promise<void> => {
758
+ await page.setViewportSize({ width: 320, height: 568 });
759
+ const response = await page.goto('/c/number-field-new');
760
+ expect(response?.ok()).toBeTruthy();
761
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
762
+ await page.waitForLoadState('networkidle');
763
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
764
+ scrollWidth: document.documentElement.scrollWidth,
765
+ innerWidth: window.innerWidth,
766
+ }));
767
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
768
+
769
+ const tooSmall = await page.evaluate((minPx: number): number => {
770
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
771
+ let undersize: number = 0;
772
+ tappable.forEach((el: HTMLElement): void => {
773
+ const rect = el.getBoundingClientRect();
774
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
775
+ undersize++;
776
+ }
777
+ });
778
+ return undersize;
779
+ }, 44);
780
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
781
+
782
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/number-field-new/mobile-s-light.png', fullPage: true });
783
+
784
+ });
785
+
786
+ test('number-field-new × mobile-m × dark', async ({ page }): Promise<void> => {
787
+ await page.setViewportSize({ width: 375, height: 667 });
788
+ const response = await page.goto('/c/number-field-new');
789
+ expect(response?.ok()).toBeTruthy();
790
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
791
+ await page.waitForLoadState('networkidle');
792
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
793
+ scrollWidth: document.documentElement.scrollWidth,
794
+ innerWidth: window.innerWidth,
795
+ }));
796
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
797
+
798
+ const tooSmall = await page.evaluate((minPx: number): number => {
799
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
800
+ let undersize: number = 0;
801
+ tappable.forEach((el: HTMLElement): void => {
802
+ const rect = el.getBoundingClientRect();
803
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
804
+ undersize++;
805
+ }
806
+ });
807
+ return undersize;
808
+ }, 44);
809
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
810
+
811
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/number-field-new/mobile-m-dark.png', fullPage: true });
812
+
813
+ });
814
+
815
+ test('number-field-new × mobile-m × light', async ({ page }): Promise<void> => {
816
+ await page.setViewportSize({ width: 375, height: 667 });
817
+ const response = await page.goto('/c/number-field-new');
818
+ expect(response?.ok()).toBeTruthy();
819
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
820
+ await page.waitForLoadState('networkidle');
821
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
822
+ scrollWidth: document.documentElement.scrollWidth,
823
+ innerWidth: window.innerWidth,
824
+ }));
825
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
826
+
827
+ const tooSmall = await page.evaluate((minPx: number): number => {
828
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
829
+ let undersize: number = 0;
830
+ tappable.forEach((el: HTMLElement): void => {
831
+ const rect = el.getBoundingClientRect();
832
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
833
+ undersize++;
834
+ }
835
+ });
836
+ return undersize;
837
+ }, 44);
838
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
839
+
840
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/number-field-new/mobile-m-light.png', fullPage: true });
841
+
842
+ });
843
+
844
+ test('number-field-new × mobile-l × dark', async ({ page }): Promise<void> => {
845
+ await page.setViewportSize({ width: 414, height: 896 });
846
+ const response = await page.goto('/c/number-field-new');
847
+ expect(response?.ok()).toBeTruthy();
848
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
849
+ await page.waitForLoadState('networkidle');
850
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
851
+ scrollWidth: document.documentElement.scrollWidth,
852
+ innerWidth: window.innerWidth,
853
+ }));
854
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
855
+
856
+ const tooSmall = await page.evaluate((minPx: number): number => {
857
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
858
+ let undersize: number = 0;
859
+ tappable.forEach((el: HTMLElement): void => {
860
+ const rect = el.getBoundingClientRect();
861
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
862
+ undersize++;
863
+ }
864
+ });
865
+ return undersize;
866
+ }, 44);
867
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
868
+
869
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/number-field-new/mobile-l-dark.png', fullPage: true });
870
+
871
+ });
872
+
873
+ test('number-field-new × mobile-l × light', async ({ page }): Promise<void> => {
874
+ await page.setViewportSize({ width: 414, height: 896 });
875
+ const response = await page.goto('/c/number-field-new');
876
+ expect(response?.ok()).toBeTruthy();
877
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
878
+ await page.waitForLoadState('networkidle');
879
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
880
+ scrollWidth: document.documentElement.scrollWidth,
881
+ innerWidth: window.innerWidth,
882
+ }));
883
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
884
+
885
+ const tooSmall = await page.evaluate((minPx: number): number => {
886
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
887
+ let undersize: number = 0;
888
+ tappable.forEach((el: HTMLElement): void => {
889
+ const rect = el.getBoundingClientRect();
890
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
891
+ undersize++;
892
+ }
893
+ });
894
+ return undersize;
895
+ }, 44);
896
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
897
+
898
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/number-field-new/mobile-l-light.png', fullPage: true });
899
+
900
+ });
901
+
902
+ test('number-field-new × tablet-p × dark', async ({ page }): Promise<void> => {
903
+ await page.setViewportSize({ width: 768, height: 1024 });
904
+ const response = await page.goto('/c/number-field-new');
905
+ expect(response?.ok()).toBeTruthy();
906
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
907
+ await page.waitForLoadState('networkidle');
908
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
909
+ scrollWidth: document.documentElement.scrollWidth,
910
+ innerWidth: window.innerWidth,
911
+ }));
912
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
913
+
914
+ const tooSmall = await page.evaluate((minPx: number): number => {
915
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
916
+ let undersize: number = 0;
917
+ tappable.forEach((el: HTMLElement): void => {
918
+ const rect = el.getBoundingClientRect();
919
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
920
+ undersize++;
921
+ }
922
+ });
923
+ return undersize;
924
+ }, 44);
925
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
926
+
927
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/number-field-new/tablet-p-dark.png', fullPage: true });
928
+
929
+ });
930
+
931
+ test('number-field-new × tablet-p × light', async ({ page }): Promise<void> => {
932
+ await page.setViewportSize({ width: 768, height: 1024 });
933
+ const response = await page.goto('/c/number-field-new');
934
+ expect(response?.ok()).toBeTruthy();
935
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
936
+ await page.waitForLoadState('networkidle');
937
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
938
+ scrollWidth: document.documentElement.scrollWidth,
939
+ innerWidth: window.innerWidth,
940
+ }));
941
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
942
+
943
+ const tooSmall = await page.evaluate((minPx: number): number => {
944
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
945
+ let undersize: number = 0;
946
+ tappable.forEach((el: HTMLElement): void => {
947
+ const rect = el.getBoundingClientRect();
948
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
949
+ undersize++;
950
+ }
951
+ });
952
+ return undersize;
953
+ }, 44);
954
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
955
+
956
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/number-field-new/tablet-p-light.png', fullPage: true });
957
+
958
+ });
959
+
960
+ test('number-field-new × tablet-l × dark', async ({ page }): Promise<void> => {
961
+ await page.setViewportSize({ width: 1024, height: 768 });
962
+ const response = await page.goto('/c/number-field-new');
963
+ expect(response?.ok()).toBeTruthy();
964
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
965
+ await page.waitForLoadState('networkidle');
966
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
967
+ scrollWidth: document.documentElement.scrollWidth,
968
+ innerWidth: window.innerWidth,
969
+ }));
970
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
971
+
972
+ const tooSmall = await page.evaluate((minPx: number): number => {
973
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
974
+ let undersize: number = 0;
975
+ tappable.forEach((el: HTMLElement): void => {
976
+ const rect = el.getBoundingClientRect();
977
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
978
+ undersize++;
979
+ }
980
+ });
981
+ return undersize;
982
+ }, 44);
983
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
984
+
985
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/number-field-new/tablet-l-dark.png', fullPage: true });
986
+
987
+ });
988
+
989
+ test('number-field-new × tablet-l × light', async ({ page }): Promise<void> => {
990
+ await page.setViewportSize({ width: 1024, height: 768 });
991
+ const response = await page.goto('/c/number-field-new');
992
+ expect(response?.ok()).toBeTruthy();
993
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
994
+ await page.waitForLoadState('networkidle');
995
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
996
+ scrollWidth: document.documentElement.scrollWidth,
997
+ innerWidth: window.innerWidth,
998
+ }));
999
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1000
+
1001
+ const tooSmall = await page.evaluate((minPx: number): number => {
1002
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1003
+ let undersize: number = 0;
1004
+ tappable.forEach((el: HTMLElement): void => {
1005
+ const rect = el.getBoundingClientRect();
1006
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1007
+ undersize++;
1008
+ }
1009
+ });
1010
+ return undersize;
1011
+ }, 44);
1012
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1013
+
1014
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/number-field-new/tablet-l-light.png', fullPage: true });
1015
+
1016
+ });
1017
+
1018
+ test('number-field-new × desktop × dark', async ({ page }): Promise<void> => {
1019
+ await page.setViewportSize({ width: 1440, height: 900 });
1020
+ const response = await page.goto('/c/number-field-new');
1021
+ expect(response?.ok()).toBeTruthy();
1022
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
1023
+ await page.waitForLoadState('networkidle');
1024
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1025
+ scrollWidth: document.documentElement.scrollWidth,
1026
+ innerWidth: window.innerWidth,
1027
+ }));
1028
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1029
+
1030
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/number-field-new/desktop-dark.png', fullPage: true });
1031
+
1032
+ });
1033
+
1034
+ test('number-field-new × desktop × light', async ({ page }): Promise<void> => {
1035
+ await page.setViewportSize({ width: 1440, height: 900 });
1036
+ const response = await page.goto('/c/number-field-new');
1037
+ expect(response?.ok()).toBeTruthy();
1038
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
1039
+ await page.waitForLoadState('networkidle');
1040
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1041
+ scrollWidth: document.documentElement.scrollWidth,
1042
+ innerWidth: window.innerWidth,
1043
+ }));
1044
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1045
+
1046
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/number-field-new/desktop-light.png', fullPage: true });
1047
+
1048
+ });
1049
+
1050
+ test('number-field-new × desktop-wide × dark', async ({ page }): Promise<void> => {
1051
+ await page.setViewportSize({ width: 1920, height: 1080 });
1052
+ const response = await page.goto('/c/number-field-new');
1053
+ expect(response?.ok()).toBeTruthy();
1054
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
1055
+ await page.waitForLoadState('networkidle');
1056
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1057
+ scrollWidth: document.documentElement.scrollWidth,
1058
+ innerWidth: window.innerWidth,
1059
+ }));
1060
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1061
+
1062
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/number-field-new/desktop-wide-dark.png', fullPage: true });
1063
+
1064
+ });
1065
+
1066
+ test('number-field-new × desktop-wide × light', async ({ page }): Promise<void> => {
1067
+ await page.setViewportSize({ width: 1920, height: 1080 });
1068
+ const response = await page.goto('/c/number-field-new');
1069
+ expect(response?.ok()).toBeTruthy();
1070
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
1071
+ await page.waitForLoadState('networkidle');
1072
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1073
+ scrollWidth: document.documentElement.scrollWidth,
1074
+ innerWidth: window.innerWidth,
1075
+ }));
1076
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1077
+
1078
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/number-field-new/desktop-wide-light.png', fullPage: true });
1079
+
1080
+ });
1081
+ });
1082
+
1083
+ test.describe('Route: Sandbox password-field-new (/c/password-field-new)', (): void => {
1084
+ test('password-field-new × mobile-s × dark', async ({ page }): Promise<void> => {
1085
+ await page.setViewportSize({ width: 320, height: 568 });
1086
+ const response = await page.goto('/c/password-field-new');
1087
+ expect(response?.ok()).toBeTruthy();
1088
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
1089
+ await page.waitForLoadState('networkidle');
1090
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1091
+ scrollWidth: document.documentElement.scrollWidth,
1092
+ innerWidth: window.innerWidth,
1093
+ }));
1094
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1095
+
1096
+ const tooSmall = await page.evaluate((minPx: number): number => {
1097
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1098
+ let undersize: number = 0;
1099
+ tappable.forEach((el: HTMLElement): void => {
1100
+ const rect = el.getBoundingClientRect();
1101
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1102
+ undersize++;
1103
+ }
1104
+ });
1105
+ return undersize;
1106
+ }, 44);
1107
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1108
+
1109
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/password-field-new/mobile-s-dark.png', fullPage: true });
1110
+
1111
+ });
1112
+
1113
+ test('password-field-new × mobile-s × light', async ({ page }): Promise<void> => {
1114
+ await page.setViewportSize({ width: 320, height: 568 });
1115
+ const response = await page.goto('/c/password-field-new');
1116
+ expect(response?.ok()).toBeTruthy();
1117
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
1118
+ await page.waitForLoadState('networkidle');
1119
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1120
+ scrollWidth: document.documentElement.scrollWidth,
1121
+ innerWidth: window.innerWidth,
1122
+ }));
1123
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1124
+
1125
+ const tooSmall = await page.evaluate((minPx: number): number => {
1126
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1127
+ let undersize: number = 0;
1128
+ tappable.forEach((el: HTMLElement): void => {
1129
+ const rect = el.getBoundingClientRect();
1130
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1131
+ undersize++;
1132
+ }
1133
+ });
1134
+ return undersize;
1135
+ }, 44);
1136
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1137
+
1138
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/password-field-new/mobile-s-light.png', fullPage: true });
1139
+
1140
+ });
1141
+
1142
+ test('password-field-new × mobile-m × dark', async ({ page }): Promise<void> => {
1143
+ await page.setViewportSize({ width: 375, height: 667 });
1144
+ const response = await page.goto('/c/password-field-new');
1145
+ expect(response?.ok()).toBeTruthy();
1146
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
1147
+ await page.waitForLoadState('networkidle');
1148
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1149
+ scrollWidth: document.documentElement.scrollWidth,
1150
+ innerWidth: window.innerWidth,
1151
+ }));
1152
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1153
+
1154
+ const tooSmall = await page.evaluate((minPx: number): number => {
1155
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1156
+ let undersize: number = 0;
1157
+ tappable.forEach((el: HTMLElement): void => {
1158
+ const rect = el.getBoundingClientRect();
1159
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1160
+ undersize++;
1161
+ }
1162
+ });
1163
+ return undersize;
1164
+ }, 44);
1165
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1166
+
1167
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/password-field-new/mobile-m-dark.png', fullPage: true });
1168
+
1169
+ });
1170
+
1171
+ test('password-field-new × mobile-m × light', async ({ page }): Promise<void> => {
1172
+ await page.setViewportSize({ width: 375, height: 667 });
1173
+ const response = await page.goto('/c/password-field-new');
1174
+ expect(response?.ok()).toBeTruthy();
1175
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
1176
+ await page.waitForLoadState('networkidle');
1177
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1178
+ scrollWidth: document.documentElement.scrollWidth,
1179
+ innerWidth: window.innerWidth,
1180
+ }));
1181
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1182
+
1183
+ const tooSmall = await page.evaluate((minPx: number): number => {
1184
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1185
+ let undersize: number = 0;
1186
+ tappable.forEach((el: HTMLElement): void => {
1187
+ const rect = el.getBoundingClientRect();
1188
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1189
+ undersize++;
1190
+ }
1191
+ });
1192
+ return undersize;
1193
+ }, 44);
1194
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1195
+
1196
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/password-field-new/mobile-m-light.png', fullPage: true });
1197
+
1198
+ });
1199
+
1200
+ test('password-field-new × mobile-l × dark', async ({ page }): Promise<void> => {
1201
+ await page.setViewportSize({ width: 414, height: 896 });
1202
+ const response = await page.goto('/c/password-field-new');
1203
+ expect(response?.ok()).toBeTruthy();
1204
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
1205
+ await page.waitForLoadState('networkidle');
1206
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1207
+ scrollWidth: document.documentElement.scrollWidth,
1208
+ innerWidth: window.innerWidth,
1209
+ }));
1210
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1211
+
1212
+ const tooSmall = await page.evaluate((minPx: number): number => {
1213
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1214
+ let undersize: number = 0;
1215
+ tappable.forEach((el: HTMLElement): void => {
1216
+ const rect = el.getBoundingClientRect();
1217
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1218
+ undersize++;
1219
+ }
1220
+ });
1221
+ return undersize;
1222
+ }, 44);
1223
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1224
+
1225
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/password-field-new/mobile-l-dark.png', fullPage: true });
1226
+
1227
+ });
1228
+
1229
+ test('password-field-new × mobile-l × light', async ({ page }): Promise<void> => {
1230
+ await page.setViewportSize({ width: 414, height: 896 });
1231
+ const response = await page.goto('/c/password-field-new');
1232
+ expect(response?.ok()).toBeTruthy();
1233
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
1234
+ await page.waitForLoadState('networkidle');
1235
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1236
+ scrollWidth: document.documentElement.scrollWidth,
1237
+ innerWidth: window.innerWidth,
1238
+ }));
1239
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1240
+
1241
+ const tooSmall = await page.evaluate((minPx: number): number => {
1242
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1243
+ let undersize: number = 0;
1244
+ tappable.forEach((el: HTMLElement): void => {
1245
+ const rect = el.getBoundingClientRect();
1246
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1247
+ undersize++;
1248
+ }
1249
+ });
1250
+ return undersize;
1251
+ }, 44);
1252
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1253
+
1254
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/password-field-new/mobile-l-light.png', fullPage: true });
1255
+
1256
+ });
1257
+
1258
+ test('password-field-new × tablet-p × dark', async ({ page }): Promise<void> => {
1259
+ await page.setViewportSize({ width: 768, height: 1024 });
1260
+ const response = await page.goto('/c/password-field-new');
1261
+ expect(response?.ok()).toBeTruthy();
1262
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
1263
+ await page.waitForLoadState('networkidle');
1264
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1265
+ scrollWidth: document.documentElement.scrollWidth,
1266
+ innerWidth: window.innerWidth,
1267
+ }));
1268
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1269
+
1270
+ const tooSmall = await page.evaluate((minPx: number): number => {
1271
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1272
+ let undersize: number = 0;
1273
+ tappable.forEach((el: HTMLElement): void => {
1274
+ const rect = el.getBoundingClientRect();
1275
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1276
+ undersize++;
1277
+ }
1278
+ });
1279
+ return undersize;
1280
+ }, 44);
1281
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1282
+
1283
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/password-field-new/tablet-p-dark.png', fullPage: true });
1284
+
1285
+ });
1286
+
1287
+ test('password-field-new × tablet-p × light', async ({ page }): Promise<void> => {
1288
+ await page.setViewportSize({ width: 768, height: 1024 });
1289
+ const response = await page.goto('/c/password-field-new');
1290
+ expect(response?.ok()).toBeTruthy();
1291
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
1292
+ await page.waitForLoadState('networkidle');
1293
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1294
+ scrollWidth: document.documentElement.scrollWidth,
1295
+ innerWidth: window.innerWidth,
1296
+ }));
1297
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1298
+
1299
+ const tooSmall = await page.evaluate((minPx: number): number => {
1300
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1301
+ let undersize: number = 0;
1302
+ tappable.forEach((el: HTMLElement): void => {
1303
+ const rect = el.getBoundingClientRect();
1304
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1305
+ undersize++;
1306
+ }
1307
+ });
1308
+ return undersize;
1309
+ }, 44);
1310
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1311
+
1312
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/password-field-new/tablet-p-light.png', fullPage: true });
1313
+
1314
+ });
1315
+
1316
+ test('password-field-new × tablet-l × dark', async ({ page }): Promise<void> => {
1317
+ await page.setViewportSize({ width: 1024, height: 768 });
1318
+ const response = await page.goto('/c/password-field-new');
1319
+ expect(response?.ok()).toBeTruthy();
1320
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
1321
+ await page.waitForLoadState('networkidle');
1322
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1323
+ scrollWidth: document.documentElement.scrollWidth,
1324
+ innerWidth: window.innerWidth,
1325
+ }));
1326
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1327
+
1328
+ const tooSmall = await page.evaluate((minPx: number): number => {
1329
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1330
+ let undersize: number = 0;
1331
+ tappable.forEach((el: HTMLElement): void => {
1332
+ const rect = el.getBoundingClientRect();
1333
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1334
+ undersize++;
1335
+ }
1336
+ });
1337
+ return undersize;
1338
+ }, 44);
1339
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1340
+
1341
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/password-field-new/tablet-l-dark.png', fullPage: true });
1342
+
1343
+ });
1344
+
1345
+ test('password-field-new × tablet-l × light', async ({ page }): Promise<void> => {
1346
+ await page.setViewportSize({ width: 1024, height: 768 });
1347
+ const response = await page.goto('/c/password-field-new');
1348
+ expect(response?.ok()).toBeTruthy();
1349
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
1350
+ await page.waitForLoadState('networkidle');
1351
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1352
+ scrollWidth: document.documentElement.scrollWidth,
1353
+ innerWidth: window.innerWidth,
1354
+ }));
1355
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1356
+
1357
+ const tooSmall = await page.evaluate((minPx: number): number => {
1358
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1359
+ let undersize: number = 0;
1360
+ tappable.forEach((el: HTMLElement): void => {
1361
+ const rect = el.getBoundingClientRect();
1362
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1363
+ undersize++;
1364
+ }
1365
+ });
1366
+ return undersize;
1367
+ }, 44);
1368
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1369
+
1370
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/password-field-new/tablet-l-light.png', fullPage: true });
1371
+
1372
+ });
1373
+
1374
+ test('password-field-new × desktop × dark', async ({ page }): Promise<void> => {
1375
+ await page.setViewportSize({ width: 1440, height: 900 });
1376
+ const response = await page.goto('/c/password-field-new');
1377
+ expect(response?.ok()).toBeTruthy();
1378
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
1379
+ await page.waitForLoadState('networkidle');
1380
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1381
+ scrollWidth: document.documentElement.scrollWidth,
1382
+ innerWidth: window.innerWidth,
1383
+ }));
1384
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1385
+
1386
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/password-field-new/desktop-dark.png', fullPage: true });
1387
+
1388
+ });
1389
+
1390
+ test('password-field-new × desktop × light', async ({ page }): Promise<void> => {
1391
+ await page.setViewportSize({ width: 1440, height: 900 });
1392
+ const response = await page.goto('/c/password-field-new');
1393
+ expect(response?.ok()).toBeTruthy();
1394
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
1395
+ await page.waitForLoadState('networkidle');
1396
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1397
+ scrollWidth: document.documentElement.scrollWidth,
1398
+ innerWidth: window.innerWidth,
1399
+ }));
1400
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1401
+
1402
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/password-field-new/desktop-light.png', fullPage: true });
1403
+
1404
+ });
1405
+
1406
+ test('password-field-new × desktop-wide × dark', async ({ page }): Promise<void> => {
1407
+ await page.setViewportSize({ width: 1920, height: 1080 });
1408
+ const response = await page.goto('/c/password-field-new');
1409
+ expect(response?.ok()).toBeTruthy();
1410
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
1411
+ await page.waitForLoadState('networkidle');
1412
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1413
+ scrollWidth: document.documentElement.scrollWidth,
1414
+ innerWidth: window.innerWidth,
1415
+ }));
1416
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1417
+
1418
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/password-field-new/desktop-wide-dark.png', fullPage: true });
1419
+
1420
+ });
1421
+
1422
+ test('password-field-new × desktop-wide × light', async ({ page }): Promise<void> => {
1423
+ await page.setViewportSize({ width: 1920, height: 1080 });
1424
+ const response = await page.goto('/c/password-field-new');
1425
+ expect(response?.ok()).toBeTruthy();
1426
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
1427
+ await page.waitForLoadState('networkidle');
1428
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1429
+ scrollWidth: document.documentElement.scrollWidth,
1430
+ innerWidth: window.innerWidth,
1431
+ }));
1432
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1433
+
1434
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/password-field-new/desktop-wide-light.png', fullPage: true });
1435
+
1436
+ });
1437
+ });
1438
+
1439
+ test.describe('Route: Sandbox slider-field-new (/c/slider-field-new)', (): void => {
1440
+ test('slider-field-new × mobile-s × dark', async ({ page }): Promise<void> => {
1441
+ await page.setViewportSize({ width: 320, height: 568 });
1442
+ const response = await page.goto('/c/slider-field-new');
1443
+ expect(response?.ok()).toBeTruthy();
1444
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
1445
+ await page.waitForLoadState('networkidle');
1446
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1447
+ scrollWidth: document.documentElement.scrollWidth,
1448
+ innerWidth: window.innerWidth,
1449
+ }));
1450
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1451
+
1452
+ const tooSmall = await page.evaluate((minPx: number): number => {
1453
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1454
+ let undersize: number = 0;
1455
+ tappable.forEach((el: HTMLElement): void => {
1456
+ const rect = el.getBoundingClientRect();
1457
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1458
+ undersize++;
1459
+ }
1460
+ });
1461
+ return undersize;
1462
+ }, 44);
1463
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1464
+
1465
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-field-new/mobile-s-dark.png', fullPage: true });
1466
+
1467
+ });
1468
+
1469
+ test('slider-field-new × mobile-s × light', async ({ page }): Promise<void> => {
1470
+ await page.setViewportSize({ width: 320, height: 568 });
1471
+ const response = await page.goto('/c/slider-field-new');
1472
+ expect(response?.ok()).toBeTruthy();
1473
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
1474
+ await page.waitForLoadState('networkidle');
1475
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1476
+ scrollWidth: document.documentElement.scrollWidth,
1477
+ innerWidth: window.innerWidth,
1478
+ }));
1479
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1480
+
1481
+ const tooSmall = await page.evaluate((minPx: number): number => {
1482
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1483
+ let undersize: number = 0;
1484
+ tappable.forEach((el: HTMLElement): void => {
1485
+ const rect = el.getBoundingClientRect();
1486
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1487
+ undersize++;
1488
+ }
1489
+ });
1490
+ return undersize;
1491
+ }, 44);
1492
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1493
+
1494
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-field-new/mobile-s-light.png', fullPage: true });
1495
+
1496
+ });
1497
+
1498
+ test('slider-field-new × mobile-m × dark', async ({ page }): Promise<void> => {
1499
+ await page.setViewportSize({ width: 375, height: 667 });
1500
+ const response = await page.goto('/c/slider-field-new');
1501
+ expect(response?.ok()).toBeTruthy();
1502
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
1503
+ await page.waitForLoadState('networkidle');
1504
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1505
+ scrollWidth: document.documentElement.scrollWidth,
1506
+ innerWidth: window.innerWidth,
1507
+ }));
1508
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1509
+
1510
+ const tooSmall = await page.evaluate((minPx: number): number => {
1511
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1512
+ let undersize: number = 0;
1513
+ tappable.forEach((el: HTMLElement): void => {
1514
+ const rect = el.getBoundingClientRect();
1515
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1516
+ undersize++;
1517
+ }
1518
+ });
1519
+ return undersize;
1520
+ }, 44);
1521
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1522
+
1523
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-field-new/mobile-m-dark.png', fullPage: true });
1524
+
1525
+ });
1526
+
1527
+ test('slider-field-new × mobile-m × light', async ({ page }): Promise<void> => {
1528
+ await page.setViewportSize({ width: 375, height: 667 });
1529
+ const response = await page.goto('/c/slider-field-new');
1530
+ expect(response?.ok()).toBeTruthy();
1531
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
1532
+ await page.waitForLoadState('networkidle');
1533
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1534
+ scrollWidth: document.documentElement.scrollWidth,
1535
+ innerWidth: window.innerWidth,
1536
+ }));
1537
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1538
+
1539
+ const tooSmall = await page.evaluate((minPx: number): number => {
1540
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1541
+ let undersize: number = 0;
1542
+ tappable.forEach((el: HTMLElement): void => {
1543
+ const rect = el.getBoundingClientRect();
1544
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1545
+ undersize++;
1546
+ }
1547
+ });
1548
+ return undersize;
1549
+ }, 44);
1550
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1551
+
1552
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-field-new/mobile-m-light.png', fullPage: true });
1553
+
1554
+ });
1555
+
1556
+ test('slider-field-new × mobile-l × dark', async ({ page }): Promise<void> => {
1557
+ await page.setViewportSize({ width: 414, height: 896 });
1558
+ const response = await page.goto('/c/slider-field-new');
1559
+ expect(response?.ok()).toBeTruthy();
1560
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
1561
+ await page.waitForLoadState('networkidle');
1562
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1563
+ scrollWidth: document.documentElement.scrollWidth,
1564
+ innerWidth: window.innerWidth,
1565
+ }));
1566
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1567
+
1568
+ const tooSmall = await page.evaluate((minPx: number): number => {
1569
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1570
+ let undersize: number = 0;
1571
+ tappable.forEach((el: HTMLElement): void => {
1572
+ const rect = el.getBoundingClientRect();
1573
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1574
+ undersize++;
1575
+ }
1576
+ });
1577
+ return undersize;
1578
+ }, 44);
1579
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1580
+
1581
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-field-new/mobile-l-dark.png', fullPage: true });
1582
+
1583
+ });
1584
+
1585
+ test('slider-field-new × mobile-l × light', async ({ page }): Promise<void> => {
1586
+ await page.setViewportSize({ width: 414, height: 896 });
1587
+ const response = await page.goto('/c/slider-field-new');
1588
+ expect(response?.ok()).toBeTruthy();
1589
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
1590
+ await page.waitForLoadState('networkidle');
1591
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1592
+ scrollWidth: document.documentElement.scrollWidth,
1593
+ innerWidth: window.innerWidth,
1594
+ }));
1595
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1596
+
1597
+ const tooSmall = await page.evaluate((minPx: number): number => {
1598
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1599
+ let undersize: number = 0;
1600
+ tappable.forEach((el: HTMLElement): void => {
1601
+ const rect = el.getBoundingClientRect();
1602
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1603
+ undersize++;
1604
+ }
1605
+ });
1606
+ return undersize;
1607
+ }, 44);
1608
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1609
+
1610
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-field-new/mobile-l-light.png', fullPage: true });
1611
+
1612
+ });
1613
+
1614
+ test('slider-field-new × tablet-p × dark', async ({ page }): Promise<void> => {
1615
+ await page.setViewportSize({ width: 768, height: 1024 });
1616
+ const response = await page.goto('/c/slider-field-new');
1617
+ expect(response?.ok()).toBeTruthy();
1618
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
1619
+ await page.waitForLoadState('networkidle');
1620
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1621
+ scrollWidth: document.documentElement.scrollWidth,
1622
+ innerWidth: window.innerWidth,
1623
+ }));
1624
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1625
+
1626
+ const tooSmall = await page.evaluate((minPx: number): number => {
1627
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1628
+ let undersize: number = 0;
1629
+ tappable.forEach((el: HTMLElement): void => {
1630
+ const rect = el.getBoundingClientRect();
1631
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1632
+ undersize++;
1633
+ }
1634
+ });
1635
+ return undersize;
1636
+ }, 44);
1637
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1638
+
1639
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-field-new/tablet-p-dark.png', fullPage: true });
1640
+
1641
+ });
1642
+
1643
+ test('slider-field-new × tablet-p × light', async ({ page }): Promise<void> => {
1644
+ await page.setViewportSize({ width: 768, height: 1024 });
1645
+ const response = await page.goto('/c/slider-field-new');
1646
+ expect(response?.ok()).toBeTruthy();
1647
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
1648
+ await page.waitForLoadState('networkidle');
1649
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1650
+ scrollWidth: document.documentElement.scrollWidth,
1651
+ innerWidth: window.innerWidth,
1652
+ }));
1653
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1654
+
1655
+ const tooSmall = await page.evaluate((minPx: number): number => {
1656
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1657
+ let undersize: number = 0;
1658
+ tappable.forEach((el: HTMLElement): void => {
1659
+ const rect = el.getBoundingClientRect();
1660
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1661
+ undersize++;
1662
+ }
1663
+ });
1664
+ return undersize;
1665
+ }, 44);
1666
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1667
+
1668
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-field-new/tablet-p-light.png', fullPage: true });
1669
+
1670
+ });
1671
+
1672
+ test('slider-field-new × tablet-l × dark', async ({ page }): Promise<void> => {
1673
+ await page.setViewportSize({ width: 1024, height: 768 });
1674
+ const response = await page.goto('/c/slider-field-new');
1675
+ expect(response?.ok()).toBeTruthy();
1676
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
1677
+ await page.waitForLoadState('networkidle');
1678
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1679
+ scrollWidth: document.documentElement.scrollWidth,
1680
+ innerWidth: window.innerWidth,
1681
+ }));
1682
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1683
+
1684
+ const tooSmall = await page.evaluate((minPx: number): number => {
1685
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1686
+ let undersize: number = 0;
1687
+ tappable.forEach((el: HTMLElement): void => {
1688
+ const rect = el.getBoundingClientRect();
1689
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1690
+ undersize++;
1691
+ }
1692
+ });
1693
+ return undersize;
1694
+ }, 44);
1695
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1696
+
1697
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-field-new/tablet-l-dark.png', fullPage: true });
1698
+
1699
+ });
1700
+
1701
+ test('slider-field-new × tablet-l × light', async ({ page }): Promise<void> => {
1702
+ await page.setViewportSize({ width: 1024, height: 768 });
1703
+ const response = await page.goto('/c/slider-field-new');
1704
+ expect(response?.ok()).toBeTruthy();
1705
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
1706
+ await page.waitForLoadState('networkidle');
1707
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1708
+ scrollWidth: document.documentElement.scrollWidth,
1709
+ innerWidth: window.innerWidth,
1710
+ }));
1711
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1712
+
1713
+ const tooSmall = await page.evaluate((minPx: number): number => {
1714
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1715
+ let undersize: number = 0;
1716
+ tappable.forEach((el: HTMLElement): void => {
1717
+ const rect = el.getBoundingClientRect();
1718
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1719
+ undersize++;
1720
+ }
1721
+ });
1722
+ return undersize;
1723
+ }, 44);
1724
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1725
+
1726
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-field-new/tablet-l-light.png', fullPage: true });
1727
+
1728
+ });
1729
+
1730
+ test('slider-field-new × desktop × dark', async ({ page }): Promise<void> => {
1731
+ await page.setViewportSize({ width: 1440, height: 900 });
1732
+ const response = await page.goto('/c/slider-field-new');
1733
+ expect(response?.ok()).toBeTruthy();
1734
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
1735
+ await page.waitForLoadState('networkidle');
1736
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1737
+ scrollWidth: document.documentElement.scrollWidth,
1738
+ innerWidth: window.innerWidth,
1739
+ }));
1740
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1741
+
1742
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-field-new/desktop-dark.png', fullPage: true });
1743
+
1744
+ });
1745
+
1746
+ test('slider-field-new × desktop × light', async ({ page }): Promise<void> => {
1747
+ await page.setViewportSize({ width: 1440, height: 900 });
1748
+ const response = await page.goto('/c/slider-field-new');
1749
+ expect(response?.ok()).toBeTruthy();
1750
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
1751
+ await page.waitForLoadState('networkidle');
1752
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1753
+ scrollWidth: document.documentElement.scrollWidth,
1754
+ innerWidth: window.innerWidth,
1755
+ }));
1756
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1757
+
1758
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-field-new/desktop-light.png', fullPage: true });
1759
+
1760
+ });
1761
+
1762
+ test('slider-field-new × desktop-wide × dark', async ({ page }): Promise<void> => {
1763
+ await page.setViewportSize({ width: 1920, height: 1080 });
1764
+ const response = await page.goto('/c/slider-field-new');
1765
+ expect(response?.ok()).toBeTruthy();
1766
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
1767
+ await page.waitForLoadState('networkidle');
1768
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1769
+ scrollWidth: document.documentElement.scrollWidth,
1770
+ innerWidth: window.innerWidth,
1771
+ }));
1772
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1773
+
1774
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-field-new/desktop-wide-dark.png', fullPage: true });
1775
+
1776
+ });
1777
+
1778
+ test('slider-field-new × desktop-wide × light', async ({ page }): Promise<void> => {
1779
+ await page.setViewportSize({ width: 1920, height: 1080 });
1780
+ const response = await page.goto('/c/slider-field-new');
1781
+ expect(response?.ok()).toBeTruthy();
1782
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
1783
+ await page.waitForLoadState('networkidle');
1784
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1785
+ scrollWidth: document.documentElement.scrollWidth,
1786
+ innerWidth: window.innerWidth,
1787
+ }));
1788
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1789
+
1790
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-field-new/desktop-wide-light.png', fullPage: true });
1791
+
1792
+ });
1793
+ });
1794
+
1795
+ test.describe('Route: Sandbox slider-range-field-new (/c/slider-range-field-new)', (): void => {
1796
+ test('slider-range-field-new × mobile-s × dark', async ({ page }): Promise<void> => {
1797
+ await page.setViewportSize({ width: 320, height: 568 });
1798
+ const response = await page.goto('/c/slider-range-field-new');
1799
+ expect(response?.ok()).toBeTruthy();
1800
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
1801
+ await page.waitForLoadState('networkidle');
1802
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1803
+ scrollWidth: document.documentElement.scrollWidth,
1804
+ innerWidth: window.innerWidth,
1805
+ }));
1806
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1807
+
1808
+ const tooSmall = await page.evaluate((minPx: number): number => {
1809
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1810
+ let undersize: number = 0;
1811
+ tappable.forEach((el: HTMLElement): void => {
1812
+ const rect = el.getBoundingClientRect();
1813
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1814
+ undersize++;
1815
+ }
1816
+ });
1817
+ return undersize;
1818
+ }, 44);
1819
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1820
+
1821
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-range-field-new/mobile-s-dark.png', fullPage: true });
1822
+
1823
+ });
1824
+
1825
+ test('slider-range-field-new × mobile-s × light', async ({ page }): Promise<void> => {
1826
+ await page.setViewportSize({ width: 320, height: 568 });
1827
+ const response = await page.goto('/c/slider-range-field-new');
1828
+ expect(response?.ok()).toBeTruthy();
1829
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
1830
+ await page.waitForLoadState('networkidle');
1831
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1832
+ scrollWidth: document.documentElement.scrollWidth,
1833
+ innerWidth: window.innerWidth,
1834
+ }));
1835
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1836
+
1837
+ const tooSmall = await page.evaluate((minPx: number): number => {
1838
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1839
+ let undersize: number = 0;
1840
+ tappable.forEach((el: HTMLElement): void => {
1841
+ const rect = el.getBoundingClientRect();
1842
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1843
+ undersize++;
1844
+ }
1845
+ });
1846
+ return undersize;
1847
+ }, 44);
1848
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1849
+
1850
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-range-field-new/mobile-s-light.png', fullPage: true });
1851
+
1852
+ });
1853
+
1854
+ test('slider-range-field-new × mobile-m × dark', async ({ page }): Promise<void> => {
1855
+ await page.setViewportSize({ width: 375, height: 667 });
1856
+ const response = await page.goto('/c/slider-range-field-new');
1857
+ expect(response?.ok()).toBeTruthy();
1858
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
1859
+ await page.waitForLoadState('networkidle');
1860
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1861
+ scrollWidth: document.documentElement.scrollWidth,
1862
+ innerWidth: window.innerWidth,
1863
+ }));
1864
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1865
+
1866
+ const tooSmall = await page.evaluate((minPx: number): number => {
1867
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1868
+ let undersize: number = 0;
1869
+ tappable.forEach((el: HTMLElement): void => {
1870
+ const rect = el.getBoundingClientRect();
1871
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1872
+ undersize++;
1873
+ }
1874
+ });
1875
+ return undersize;
1876
+ }, 44);
1877
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1878
+
1879
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-range-field-new/mobile-m-dark.png', fullPage: true });
1880
+
1881
+ });
1882
+
1883
+ test('slider-range-field-new × mobile-m × light', async ({ page }): Promise<void> => {
1884
+ await page.setViewportSize({ width: 375, height: 667 });
1885
+ const response = await page.goto('/c/slider-range-field-new');
1886
+ expect(response?.ok()).toBeTruthy();
1887
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
1888
+ await page.waitForLoadState('networkidle');
1889
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1890
+ scrollWidth: document.documentElement.scrollWidth,
1891
+ innerWidth: window.innerWidth,
1892
+ }));
1893
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1894
+
1895
+ const tooSmall = await page.evaluate((minPx: number): number => {
1896
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1897
+ let undersize: number = 0;
1898
+ tappable.forEach((el: HTMLElement): void => {
1899
+ const rect = el.getBoundingClientRect();
1900
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1901
+ undersize++;
1902
+ }
1903
+ });
1904
+ return undersize;
1905
+ }, 44);
1906
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1907
+
1908
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-range-field-new/mobile-m-light.png', fullPage: true });
1909
+
1910
+ });
1911
+
1912
+ test('slider-range-field-new × mobile-l × dark', async ({ page }): Promise<void> => {
1913
+ await page.setViewportSize({ width: 414, height: 896 });
1914
+ const response = await page.goto('/c/slider-range-field-new');
1915
+ expect(response?.ok()).toBeTruthy();
1916
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
1917
+ await page.waitForLoadState('networkidle');
1918
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1919
+ scrollWidth: document.documentElement.scrollWidth,
1920
+ innerWidth: window.innerWidth,
1921
+ }));
1922
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1923
+
1924
+ const tooSmall = await page.evaluate((minPx: number): number => {
1925
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1926
+ let undersize: number = 0;
1927
+ tappable.forEach((el: HTMLElement): void => {
1928
+ const rect = el.getBoundingClientRect();
1929
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1930
+ undersize++;
1931
+ }
1932
+ });
1933
+ return undersize;
1934
+ }, 44);
1935
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1936
+
1937
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-range-field-new/mobile-l-dark.png', fullPage: true });
1938
+
1939
+ });
1940
+
1941
+ test('slider-range-field-new × mobile-l × light', async ({ page }): Promise<void> => {
1942
+ await page.setViewportSize({ width: 414, height: 896 });
1943
+ const response = await page.goto('/c/slider-range-field-new');
1944
+ expect(response?.ok()).toBeTruthy();
1945
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
1946
+ await page.waitForLoadState('networkidle');
1947
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1948
+ scrollWidth: document.documentElement.scrollWidth,
1949
+ innerWidth: window.innerWidth,
1950
+ }));
1951
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1952
+
1953
+ const tooSmall = await page.evaluate((minPx: number): number => {
1954
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1955
+ let undersize: number = 0;
1956
+ tappable.forEach((el: HTMLElement): void => {
1957
+ const rect = el.getBoundingClientRect();
1958
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1959
+ undersize++;
1960
+ }
1961
+ });
1962
+ return undersize;
1963
+ }, 44);
1964
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1965
+
1966
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-range-field-new/mobile-l-light.png', fullPage: true });
1967
+
1968
+ });
1969
+
1970
+ test('slider-range-field-new × tablet-p × dark', async ({ page }): Promise<void> => {
1971
+ await page.setViewportSize({ width: 768, height: 1024 });
1972
+ const response = await page.goto('/c/slider-range-field-new');
1973
+ expect(response?.ok()).toBeTruthy();
1974
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
1975
+ await page.waitForLoadState('networkidle');
1976
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
1977
+ scrollWidth: document.documentElement.scrollWidth,
1978
+ innerWidth: window.innerWidth,
1979
+ }));
1980
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
1981
+
1982
+ const tooSmall = await page.evaluate((minPx: number): number => {
1983
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
1984
+ let undersize: number = 0;
1985
+ tappable.forEach((el: HTMLElement): void => {
1986
+ const rect = el.getBoundingClientRect();
1987
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
1988
+ undersize++;
1989
+ }
1990
+ });
1991
+ return undersize;
1992
+ }, 44);
1993
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
1994
+
1995
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-range-field-new/tablet-p-dark.png', fullPage: true });
1996
+
1997
+ });
1998
+
1999
+ test('slider-range-field-new × tablet-p × light', async ({ page }): Promise<void> => {
2000
+ await page.setViewportSize({ width: 768, height: 1024 });
2001
+ const response = await page.goto('/c/slider-range-field-new');
2002
+ expect(response?.ok()).toBeTruthy();
2003
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
2004
+ await page.waitForLoadState('networkidle');
2005
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2006
+ scrollWidth: document.documentElement.scrollWidth,
2007
+ innerWidth: window.innerWidth,
2008
+ }));
2009
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2010
+
2011
+ const tooSmall = await page.evaluate((minPx: number): number => {
2012
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2013
+ let undersize: number = 0;
2014
+ tappable.forEach((el: HTMLElement): void => {
2015
+ const rect = el.getBoundingClientRect();
2016
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2017
+ undersize++;
2018
+ }
2019
+ });
2020
+ return undersize;
2021
+ }, 44);
2022
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2023
+
2024
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-range-field-new/tablet-p-light.png', fullPage: true });
2025
+
2026
+ });
2027
+
2028
+ test('slider-range-field-new × tablet-l × dark', async ({ page }): Promise<void> => {
2029
+ await page.setViewportSize({ width: 1024, height: 768 });
2030
+ const response = await page.goto('/c/slider-range-field-new');
2031
+ expect(response?.ok()).toBeTruthy();
2032
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
2033
+ await page.waitForLoadState('networkidle');
2034
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2035
+ scrollWidth: document.documentElement.scrollWidth,
2036
+ innerWidth: window.innerWidth,
2037
+ }));
2038
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2039
+
2040
+ const tooSmall = await page.evaluate((minPx: number): number => {
2041
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2042
+ let undersize: number = 0;
2043
+ tappable.forEach((el: HTMLElement): void => {
2044
+ const rect = el.getBoundingClientRect();
2045
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2046
+ undersize++;
2047
+ }
2048
+ });
2049
+ return undersize;
2050
+ }, 44);
2051
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2052
+
2053
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-range-field-new/tablet-l-dark.png', fullPage: true });
2054
+
2055
+ });
2056
+
2057
+ test('slider-range-field-new × tablet-l × light', async ({ page }): Promise<void> => {
2058
+ await page.setViewportSize({ width: 1024, height: 768 });
2059
+ const response = await page.goto('/c/slider-range-field-new');
2060
+ expect(response?.ok()).toBeTruthy();
2061
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
2062
+ await page.waitForLoadState('networkidle');
2063
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2064
+ scrollWidth: document.documentElement.scrollWidth,
2065
+ innerWidth: window.innerWidth,
2066
+ }));
2067
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2068
+
2069
+ const tooSmall = await page.evaluate((minPx: number): number => {
2070
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2071
+ let undersize: number = 0;
2072
+ tappable.forEach((el: HTMLElement): void => {
2073
+ const rect = el.getBoundingClientRect();
2074
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2075
+ undersize++;
2076
+ }
2077
+ });
2078
+ return undersize;
2079
+ }, 44);
2080
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2081
+
2082
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-range-field-new/tablet-l-light.png', fullPage: true });
2083
+
2084
+ });
2085
+
2086
+ test('slider-range-field-new × desktop × dark', async ({ page }): Promise<void> => {
2087
+ await page.setViewportSize({ width: 1440, height: 900 });
2088
+ const response = await page.goto('/c/slider-range-field-new');
2089
+ expect(response?.ok()).toBeTruthy();
2090
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
2091
+ await page.waitForLoadState('networkidle');
2092
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2093
+ scrollWidth: document.documentElement.scrollWidth,
2094
+ innerWidth: window.innerWidth,
2095
+ }));
2096
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2097
+
2098
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-range-field-new/desktop-dark.png', fullPage: true });
2099
+
2100
+ });
2101
+
2102
+ test('slider-range-field-new × desktop × light', async ({ page }): Promise<void> => {
2103
+ await page.setViewportSize({ width: 1440, height: 900 });
2104
+ const response = await page.goto('/c/slider-range-field-new');
2105
+ expect(response?.ok()).toBeTruthy();
2106
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
2107
+ await page.waitForLoadState('networkidle');
2108
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2109
+ scrollWidth: document.documentElement.scrollWidth,
2110
+ innerWidth: window.innerWidth,
2111
+ }));
2112
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2113
+
2114
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-range-field-new/desktop-light.png', fullPage: true });
2115
+
2116
+ });
2117
+
2118
+ test('slider-range-field-new × desktop-wide × dark', async ({ page }): Promise<void> => {
2119
+ await page.setViewportSize({ width: 1920, height: 1080 });
2120
+ const response = await page.goto('/c/slider-range-field-new');
2121
+ expect(response?.ok()).toBeTruthy();
2122
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
2123
+ await page.waitForLoadState('networkidle');
2124
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2125
+ scrollWidth: document.documentElement.scrollWidth,
2126
+ innerWidth: window.innerWidth,
2127
+ }));
2128
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2129
+
2130
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-range-field-new/desktop-wide-dark.png', fullPage: true });
2131
+
2132
+ });
2133
+
2134
+ test('slider-range-field-new × desktop-wide × light', async ({ page }): Promise<void> => {
2135
+ await page.setViewportSize({ width: 1920, height: 1080 });
2136
+ const response = await page.goto('/c/slider-range-field-new');
2137
+ expect(response?.ok()).toBeTruthy();
2138
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
2139
+ await page.waitForLoadState('networkidle');
2140
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2141
+ scrollWidth: document.documentElement.scrollWidth,
2142
+ innerWidth: window.innerWidth,
2143
+ }));
2144
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2145
+
2146
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/slider-range-field-new/desktop-wide-light.png', fullPage: true });
2147
+
2148
+ });
2149
+ });
2150
+
2151
+ test.describe('Route: Sandbox checkbox-field-new (/c/checkbox-field-new)', (): void => {
2152
+ test('checkbox-field-new × mobile-s × dark', async ({ page }): Promise<void> => {
2153
+ await page.setViewportSize({ width: 320, height: 568 });
2154
+ const response = await page.goto('/c/checkbox-field-new');
2155
+ expect(response?.ok()).toBeTruthy();
2156
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
2157
+ await page.waitForLoadState('networkidle');
2158
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2159
+ scrollWidth: document.documentElement.scrollWidth,
2160
+ innerWidth: window.innerWidth,
2161
+ }));
2162
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2163
+
2164
+ const tooSmall = await page.evaluate((minPx: number): number => {
2165
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2166
+ let undersize: number = 0;
2167
+ tappable.forEach((el: HTMLElement): void => {
2168
+ const rect = el.getBoundingClientRect();
2169
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2170
+ undersize++;
2171
+ }
2172
+ });
2173
+ return undersize;
2174
+ }, 44);
2175
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2176
+
2177
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/checkbox-field-new/mobile-s-dark.png', fullPage: true });
2178
+
2179
+ });
2180
+
2181
+ test('checkbox-field-new × mobile-s × light', async ({ page }): Promise<void> => {
2182
+ await page.setViewportSize({ width: 320, height: 568 });
2183
+ const response = await page.goto('/c/checkbox-field-new');
2184
+ expect(response?.ok()).toBeTruthy();
2185
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
2186
+ await page.waitForLoadState('networkidle');
2187
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2188
+ scrollWidth: document.documentElement.scrollWidth,
2189
+ innerWidth: window.innerWidth,
2190
+ }));
2191
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2192
+
2193
+ const tooSmall = await page.evaluate((minPx: number): number => {
2194
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2195
+ let undersize: number = 0;
2196
+ tappable.forEach((el: HTMLElement): void => {
2197
+ const rect = el.getBoundingClientRect();
2198
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2199
+ undersize++;
2200
+ }
2201
+ });
2202
+ return undersize;
2203
+ }, 44);
2204
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2205
+
2206
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/checkbox-field-new/mobile-s-light.png', fullPage: true });
2207
+
2208
+ });
2209
+
2210
+ test('checkbox-field-new × mobile-m × dark', async ({ page }): Promise<void> => {
2211
+ await page.setViewportSize({ width: 375, height: 667 });
2212
+ const response = await page.goto('/c/checkbox-field-new');
2213
+ expect(response?.ok()).toBeTruthy();
2214
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
2215
+ await page.waitForLoadState('networkidle');
2216
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2217
+ scrollWidth: document.documentElement.scrollWidth,
2218
+ innerWidth: window.innerWidth,
2219
+ }));
2220
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2221
+
2222
+ const tooSmall = await page.evaluate((minPx: number): number => {
2223
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2224
+ let undersize: number = 0;
2225
+ tappable.forEach((el: HTMLElement): void => {
2226
+ const rect = el.getBoundingClientRect();
2227
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2228
+ undersize++;
2229
+ }
2230
+ });
2231
+ return undersize;
2232
+ }, 44);
2233
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2234
+
2235
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/checkbox-field-new/mobile-m-dark.png', fullPage: true });
2236
+
2237
+ });
2238
+
2239
+ test('checkbox-field-new × mobile-m × light', async ({ page }): Promise<void> => {
2240
+ await page.setViewportSize({ width: 375, height: 667 });
2241
+ const response = await page.goto('/c/checkbox-field-new');
2242
+ expect(response?.ok()).toBeTruthy();
2243
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
2244
+ await page.waitForLoadState('networkidle');
2245
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2246
+ scrollWidth: document.documentElement.scrollWidth,
2247
+ innerWidth: window.innerWidth,
2248
+ }));
2249
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2250
+
2251
+ const tooSmall = await page.evaluate((minPx: number): number => {
2252
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2253
+ let undersize: number = 0;
2254
+ tappable.forEach((el: HTMLElement): void => {
2255
+ const rect = el.getBoundingClientRect();
2256
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2257
+ undersize++;
2258
+ }
2259
+ });
2260
+ return undersize;
2261
+ }, 44);
2262
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2263
+
2264
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/checkbox-field-new/mobile-m-light.png', fullPage: true });
2265
+
2266
+ });
2267
+
2268
+ test('checkbox-field-new × mobile-l × dark', async ({ page }): Promise<void> => {
2269
+ await page.setViewportSize({ width: 414, height: 896 });
2270
+ const response = await page.goto('/c/checkbox-field-new');
2271
+ expect(response?.ok()).toBeTruthy();
2272
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
2273
+ await page.waitForLoadState('networkidle');
2274
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2275
+ scrollWidth: document.documentElement.scrollWidth,
2276
+ innerWidth: window.innerWidth,
2277
+ }));
2278
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2279
+
2280
+ const tooSmall = await page.evaluate((minPx: number): number => {
2281
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2282
+ let undersize: number = 0;
2283
+ tappable.forEach((el: HTMLElement): void => {
2284
+ const rect = el.getBoundingClientRect();
2285
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2286
+ undersize++;
2287
+ }
2288
+ });
2289
+ return undersize;
2290
+ }, 44);
2291
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2292
+
2293
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/checkbox-field-new/mobile-l-dark.png', fullPage: true });
2294
+
2295
+ });
2296
+
2297
+ test('checkbox-field-new × mobile-l × light', async ({ page }): Promise<void> => {
2298
+ await page.setViewportSize({ width: 414, height: 896 });
2299
+ const response = await page.goto('/c/checkbox-field-new');
2300
+ expect(response?.ok()).toBeTruthy();
2301
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
2302
+ await page.waitForLoadState('networkidle');
2303
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2304
+ scrollWidth: document.documentElement.scrollWidth,
2305
+ innerWidth: window.innerWidth,
2306
+ }));
2307
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2308
+
2309
+ const tooSmall = await page.evaluate((minPx: number): number => {
2310
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2311
+ let undersize: number = 0;
2312
+ tappable.forEach((el: HTMLElement): void => {
2313
+ const rect = el.getBoundingClientRect();
2314
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2315
+ undersize++;
2316
+ }
2317
+ });
2318
+ return undersize;
2319
+ }, 44);
2320
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2321
+
2322
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/checkbox-field-new/mobile-l-light.png', fullPage: true });
2323
+
2324
+ });
2325
+
2326
+ test('checkbox-field-new × tablet-p × dark', async ({ page }): Promise<void> => {
2327
+ await page.setViewportSize({ width: 768, height: 1024 });
2328
+ const response = await page.goto('/c/checkbox-field-new');
2329
+ expect(response?.ok()).toBeTruthy();
2330
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
2331
+ await page.waitForLoadState('networkidle');
2332
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2333
+ scrollWidth: document.documentElement.scrollWidth,
2334
+ innerWidth: window.innerWidth,
2335
+ }));
2336
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2337
+
2338
+ const tooSmall = await page.evaluate((minPx: number): number => {
2339
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2340
+ let undersize: number = 0;
2341
+ tappable.forEach((el: HTMLElement): void => {
2342
+ const rect = el.getBoundingClientRect();
2343
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2344
+ undersize++;
2345
+ }
2346
+ });
2347
+ return undersize;
2348
+ }, 44);
2349
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2350
+
2351
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/checkbox-field-new/tablet-p-dark.png', fullPage: true });
2352
+
2353
+ });
2354
+
2355
+ test('checkbox-field-new × tablet-p × light', async ({ page }): Promise<void> => {
2356
+ await page.setViewportSize({ width: 768, height: 1024 });
2357
+ const response = await page.goto('/c/checkbox-field-new');
2358
+ expect(response?.ok()).toBeTruthy();
2359
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
2360
+ await page.waitForLoadState('networkidle');
2361
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2362
+ scrollWidth: document.documentElement.scrollWidth,
2363
+ innerWidth: window.innerWidth,
2364
+ }));
2365
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2366
+
2367
+ const tooSmall = await page.evaluate((minPx: number): number => {
2368
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2369
+ let undersize: number = 0;
2370
+ tappable.forEach((el: HTMLElement): void => {
2371
+ const rect = el.getBoundingClientRect();
2372
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2373
+ undersize++;
2374
+ }
2375
+ });
2376
+ return undersize;
2377
+ }, 44);
2378
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2379
+
2380
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/checkbox-field-new/tablet-p-light.png', fullPage: true });
2381
+
2382
+ });
2383
+
2384
+ test('checkbox-field-new × tablet-l × dark', async ({ page }): Promise<void> => {
2385
+ await page.setViewportSize({ width: 1024, height: 768 });
2386
+ const response = await page.goto('/c/checkbox-field-new');
2387
+ expect(response?.ok()).toBeTruthy();
2388
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
2389
+ await page.waitForLoadState('networkidle');
2390
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2391
+ scrollWidth: document.documentElement.scrollWidth,
2392
+ innerWidth: window.innerWidth,
2393
+ }));
2394
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2395
+
2396
+ const tooSmall = await page.evaluate((minPx: number): number => {
2397
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2398
+ let undersize: number = 0;
2399
+ tappable.forEach((el: HTMLElement): void => {
2400
+ const rect = el.getBoundingClientRect();
2401
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2402
+ undersize++;
2403
+ }
2404
+ });
2405
+ return undersize;
2406
+ }, 44);
2407
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2408
+
2409
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/checkbox-field-new/tablet-l-dark.png', fullPage: true });
2410
+
2411
+ });
2412
+
2413
+ test('checkbox-field-new × tablet-l × light', async ({ page }): Promise<void> => {
2414
+ await page.setViewportSize({ width: 1024, height: 768 });
2415
+ const response = await page.goto('/c/checkbox-field-new');
2416
+ expect(response?.ok()).toBeTruthy();
2417
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
2418
+ await page.waitForLoadState('networkidle');
2419
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2420
+ scrollWidth: document.documentElement.scrollWidth,
2421
+ innerWidth: window.innerWidth,
2422
+ }));
2423
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2424
+
2425
+ const tooSmall = await page.evaluate((minPx: number): number => {
2426
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2427
+ let undersize: number = 0;
2428
+ tappable.forEach((el: HTMLElement): void => {
2429
+ const rect = el.getBoundingClientRect();
2430
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2431
+ undersize++;
2432
+ }
2433
+ });
2434
+ return undersize;
2435
+ }, 44);
2436
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2437
+
2438
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/checkbox-field-new/tablet-l-light.png', fullPage: true });
2439
+
2440
+ });
2441
+
2442
+ test('checkbox-field-new × desktop × dark', async ({ page }): Promise<void> => {
2443
+ await page.setViewportSize({ width: 1440, height: 900 });
2444
+ const response = await page.goto('/c/checkbox-field-new');
2445
+ expect(response?.ok()).toBeTruthy();
2446
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
2447
+ await page.waitForLoadState('networkidle');
2448
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2449
+ scrollWidth: document.documentElement.scrollWidth,
2450
+ innerWidth: window.innerWidth,
2451
+ }));
2452
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2453
+
2454
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/checkbox-field-new/desktop-dark.png', fullPage: true });
2455
+
2456
+ });
2457
+
2458
+ test('checkbox-field-new × desktop × light', async ({ page }): Promise<void> => {
2459
+ await page.setViewportSize({ width: 1440, height: 900 });
2460
+ const response = await page.goto('/c/checkbox-field-new');
2461
+ expect(response?.ok()).toBeTruthy();
2462
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
2463
+ await page.waitForLoadState('networkidle');
2464
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2465
+ scrollWidth: document.documentElement.scrollWidth,
2466
+ innerWidth: window.innerWidth,
2467
+ }));
2468
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2469
+
2470
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/checkbox-field-new/desktop-light.png', fullPage: true });
2471
+
2472
+ });
2473
+
2474
+ test('checkbox-field-new × desktop-wide × dark', async ({ page }): Promise<void> => {
2475
+ await page.setViewportSize({ width: 1920, height: 1080 });
2476
+ const response = await page.goto('/c/checkbox-field-new');
2477
+ expect(response?.ok()).toBeTruthy();
2478
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
2479
+ await page.waitForLoadState('networkidle');
2480
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2481
+ scrollWidth: document.documentElement.scrollWidth,
2482
+ innerWidth: window.innerWidth,
2483
+ }));
2484
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2485
+
2486
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/checkbox-field-new/desktop-wide-dark.png', fullPage: true });
2487
+
2488
+ });
2489
+
2490
+ test('checkbox-field-new × desktop-wide × light', async ({ page }): Promise<void> => {
2491
+ await page.setViewportSize({ width: 1920, height: 1080 });
2492
+ const response = await page.goto('/c/checkbox-field-new');
2493
+ expect(response?.ok()).toBeTruthy();
2494
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
2495
+ await page.waitForLoadState('networkidle');
2496
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2497
+ scrollWidth: document.documentElement.scrollWidth,
2498
+ innerWidth: window.innerWidth,
2499
+ }));
2500
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2501
+
2502
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/checkbox-field-new/desktop-wide-light.png', fullPage: true });
2503
+
2504
+ });
2505
+ });
2506
+
2507
+ test.describe('Route: Sandbox select-field-new (/c/select-field-new)', (): void => {
2508
+ test('select-field-new × mobile-s × dark', async ({ page }): Promise<void> => {
2509
+ await page.setViewportSize({ width: 320, height: 568 });
2510
+ const response = await page.goto('/c/select-field-new');
2511
+ expect(response?.ok()).toBeTruthy();
2512
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
2513
+ await page.waitForLoadState('networkidle');
2514
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2515
+ scrollWidth: document.documentElement.scrollWidth,
2516
+ innerWidth: window.innerWidth,
2517
+ }));
2518
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2519
+
2520
+ const tooSmall = await page.evaluate((minPx: number): number => {
2521
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2522
+ let undersize: number = 0;
2523
+ tappable.forEach((el: HTMLElement): void => {
2524
+ const rect = el.getBoundingClientRect();
2525
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2526
+ undersize++;
2527
+ }
2528
+ });
2529
+ return undersize;
2530
+ }, 44);
2531
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2532
+
2533
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/select-field-new/mobile-s-dark.png', fullPage: true });
2534
+
2535
+ });
2536
+
2537
+ test('select-field-new × mobile-s × light', async ({ page }): Promise<void> => {
2538
+ await page.setViewportSize({ width: 320, height: 568 });
2539
+ const response = await page.goto('/c/select-field-new');
2540
+ expect(response?.ok()).toBeTruthy();
2541
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
2542
+ await page.waitForLoadState('networkidle');
2543
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2544
+ scrollWidth: document.documentElement.scrollWidth,
2545
+ innerWidth: window.innerWidth,
2546
+ }));
2547
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2548
+
2549
+ const tooSmall = await page.evaluate((minPx: number): number => {
2550
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2551
+ let undersize: number = 0;
2552
+ tappable.forEach((el: HTMLElement): void => {
2553
+ const rect = el.getBoundingClientRect();
2554
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2555
+ undersize++;
2556
+ }
2557
+ });
2558
+ return undersize;
2559
+ }, 44);
2560
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2561
+
2562
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/select-field-new/mobile-s-light.png', fullPage: true });
2563
+
2564
+ });
2565
+
2566
+ test('select-field-new × mobile-m × dark', async ({ page }): Promise<void> => {
2567
+ await page.setViewportSize({ width: 375, height: 667 });
2568
+ const response = await page.goto('/c/select-field-new');
2569
+ expect(response?.ok()).toBeTruthy();
2570
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
2571
+ await page.waitForLoadState('networkidle');
2572
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2573
+ scrollWidth: document.documentElement.scrollWidth,
2574
+ innerWidth: window.innerWidth,
2575
+ }));
2576
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2577
+
2578
+ const tooSmall = await page.evaluate((minPx: number): number => {
2579
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2580
+ let undersize: number = 0;
2581
+ tappable.forEach((el: HTMLElement): void => {
2582
+ const rect = el.getBoundingClientRect();
2583
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2584
+ undersize++;
2585
+ }
2586
+ });
2587
+ return undersize;
2588
+ }, 44);
2589
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2590
+
2591
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/select-field-new/mobile-m-dark.png', fullPage: true });
2592
+
2593
+ });
2594
+
2595
+ test('select-field-new × mobile-m × light', async ({ page }): Promise<void> => {
2596
+ await page.setViewportSize({ width: 375, height: 667 });
2597
+ const response = await page.goto('/c/select-field-new');
2598
+ expect(response?.ok()).toBeTruthy();
2599
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
2600
+ await page.waitForLoadState('networkidle');
2601
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2602
+ scrollWidth: document.documentElement.scrollWidth,
2603
+ innerWidth: window.innerWidth,
2604
+ }));
2605
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2606
+
2607
+ const tooSmall = await page.evaluate((minPx: number): number => {
2608
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2609
+ let undersize: number = 0;
2610
+ tappable.forEach((el: HTMLElement): void => {
2611
+ const rect = el.getBoundingClientRect();
2612
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2613
+ undersize++;
2614
+ }
2615
+ });
2616
+ return undersize;
2617
+ }, 44);
2618
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2619
+
2620
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/select-field-new/mobile-m-light.png', fullPage: true });
2621
+
2622
+ });
2623
+
2624
+ test('select-field-new × mobile-l × dark', async ({ page }): Promise<void> => {
2625
+ await page.setViewportSize({ width: 414, height: 896 });
2626
+ const response = await page.goto('/c/select-field-new');
2627
+ expect(response?.ok()).toBeTruthy();
2628
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
2629
+ await page.waitForLoadState('networkidle');
2630
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2631
+ scrollWidth: document.documentElement.scrollWidth,
2632
+ innerWidth: window.innerWidth,
2633
+ }));
2634
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2635
+
2636
+ const tooSmall = await page.evaluate((minPx: number): number => {
2637
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2638
+ let undersize: number = 0;
2639
+ tappable.forEach((el: HTMLElement): void => {
2640
+ const rect = el.getBoundingClientRect();
2641
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2642
+ undersize++;
2643
+ }
2644
+ });
2645
+ return undersize;
2646
+ }, 44);
2647
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2648
+
2649
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/select-field-new/mobile-l-dark.png', fullPage: true });
2650
+
2651
+ });
2652
+
2653
+ test('select-field-new × mobile-l × light', async ({ page }): Promise<void> => {
2654
+ await page.setViewportSize({ width: 414, height: 896 });
2655
+ const response = await page.goto('/c/select-field-new');
2656
+ expect(response?.ok()).toBeTruthy();
2657
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
2658
+ await page.waitForLoadState('networkidle');
2659
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2660
+ scrollWidth: document.documentElement.scrollWidth,
2661
+ innerWidth: window.innerWidth,
2662
+ }));
2663
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2664
+
2665
+ const tooSmall = await page.evaluate((minPx: number): number => {
2666
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2667
+ let undersize: number = 0;
2668
+ tappable.forEach((el: HTMLElement): void => {
2669
+ const rect = el.getBoundingClientRect();
2670
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2671
+ undersize++;
2672
+ }
2673
+ });
2674
+ return undersize;
2675
+ }, 44);
2676
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2677
+
2678
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/select-field-new/mobile-l-light.png', fullPage: true });
2679
+
2680
+ });
2681
+
2682
+ test('select-field-new × tablet-p × dark', async ({ page }): Promise<void> => {
2683
+ await page.setViewportSize({ width: 768, height: 1024 });
2684
+ const response = await page.goto('/c/select-field-new');
2685
+ expect(response?.ok()).toBeTruthy();
2686
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
2687
+ await page.waitForLoadState('networkidle');
2688
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2689
+ scrollWidth: document.documentElement.scrollWidth,
2690
+ innerWidth: window.innerWidth,
2691
+ }));
2692
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2693
+
2694
+ const tooSmall = await page.evaluate((minPx: number): number => {
2695
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2696
+ let undersize: number = 0;
2697
+ tappable.forEach((el: HTMLElement): void => {
2698
+ const rect = el.getBoundingClientRect();
2699
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2700
+ undersize++;
2701
+ }
2702
+ });
2703
+ return undersize;
2704
+ }, 44);
2705
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2706
+
2707
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/select-field-new/tablet-p-dark.png', fullPage: true });
2708
+
2709
+ });
2710
+
2711
+ test('select-field-new × tablet-p × light', async ({ page }): Promise<void> => {
2712
+ await page.setViewportSize({ width: 768, height: 1024 });
2713
+ const response = await page.goto('/c/select-field-new');
2714
+ expect(response?.ok()).toBeTruthy();
2715
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
2716
+ await page.waitForLoadState('networkidle');
2717
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2718
+ scrollWidth: document.documentElement.scrollWidth,
2719
+ innerWidth: window.innerWidth,
2720
+ }));
2721
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2722
+
2723
+ const tooSmall = await page.evaluate((minPx: number): number => {
2724
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2725
+ let undersize: number = 0;
2726
+ tappable.forEach((el: HTMLElement): void => {
2727
+ const rect = el.getBoundingClientRect();
2728
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2729
+ undersize++;
2730
+ }
2731
+ });
2732
+ return undersize;
2733
+ }, 44);
2734
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2735
+
2736
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/select-field-new/tablet-p-light.png', fullPage: true });
2737
+
2738
+ });
2739
+
2740
+ test('select-field-new × tablet-l × dark', async ({ page }): Promise<void> => {
2741
+ await page.setViewportSize({ width: 1024, height: 768 });
2742
+ const response = await page.goto('/c/select-field-new');
2743
+ expect(response?.ok()).toBeTruthy();
2744
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
2745
+ await page.waitForLoadState('networkidle');
2746
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2747
+ scrollWidth: document.documentElement.scrollWidth,
2748
+ innerWidth: window.innerWidth,
2749
+ }));
2750
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2751
+
2752
+ const tooSmall = await page.evaluate((minPx: number): number => {
2753
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2754
+ let undersize: number = 0;
2755
+ tappable.forEach((el: HTMLElement): void => {
2756
+ const rect = el.getBoundingClientRect();
2757
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2758
+ undersize++;
2759
+ }
2760
+ });
2761
+ return undersize;
2762
+ }, 44);
2763
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2764
+
2765
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/select-field-new/tablet-l-dark.png', fullPage: true });
2766
+
2767
+ });
2768
+
2769
+ test('select-field-new × tablet-l × light', async ({ page }): Promise<void> => {
2770
+ await page.setViewportSize({ width: 1024, height: 768 });
2771
+ const response = await page.goto('/c/select-field-new');
2772
+ expect(response?.ok()).toBeTruthy();
2773
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
2774
+ await page.waitForLoadState('networkidle');
2775
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2776
+ scrollWidth: document.documentElement.scrollWidth,
2777
+ innerWidth: window.innerWidth,
2778
+ }));
2779
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2780
+
2781
+ const tooSmall = await page.evaluate((minPx: number): number => {
2782
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2783
+ let undersize: number = 0;
2784
+ tappable.forEach((el: HTMLElement): void => {
2785
+ const rect = el.getBoundingClientRect();
2786
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2787
+ undersize++;
2788
+ }
2789
+ });
2790
+ return undersize;
2791
+ }, 44);
2792
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2793
+
2794
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/select-field-new/tablet-l-light.png', fullPage: true });
2795
+
2796
+ });
2797
+
2798
+ test('select-field-new × desktop × dark', async ({ page }): Promise<void> => {
2799
+ await page.setViewportSize({ width: 1440, height: 900 });
2800
+ const response = await page.goto('/c/select-field-new');
2801
+ expect(response?.ok()).toBeTruthy();
2802
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
2803
+ await page.waitForLoadState('networkidle');
2804
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2805
+ scrollWidth: document.documentElement.scrollWidth,
2806
+ innerWidth: window.innerWidth,
2807
+ }));
2808
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2809
+
2810
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/select-field-new/desktop-dark.png', fullPage: true });
2811
+
2812
+ });
2813
+
2814
+ test('select-field-new × desktop × light', async ({ page }): Promise<void> => {
2815
+ await page.setViewportSize({ width: 1440, height: 900 });
2816
+ const response = await page.goto('/c/select-field-new');
2817
+ expect(response?.ok()).toBeTruthy();
2818
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
2819
+ await page.waitForLoadState('networkidle');
2820
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2821
+ scrollWidth: document.documentElement.scrollWidth,
2822
+ innerWidth: window.innerWidth,
2823
+ }));
2824
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2825
+
2826
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/select-field-new/desktop-light.png', fullPage: true });
2827
+
2828
+ });
2829
+
2830
+ test('select-field-new × desktop-wide × dark', async ({ page }): Promise<void> => {
2831
+ await page.setViewportSize({ width: 1920, height: 1080 });
2832
+ const response = await page.goto('/c/select-field-new');
2833
+ expect(response?.ok()).toBeTruthy();
2834
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
2835
+ await page.waitForLoadState('networkidle');
2836
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2837
+ scrollWidth: document.documentElement.scrollWidth,
2838
+ innerWidth: window.innerWidth,
2839
+ }));
2840
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2841
+
2842
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/select-field-new/desktop-wide-dark.png', fullPage: true });
2843
+
2844
+ });
2845
+
2846
+ test('select-field-new × desktop-wide × light', async ({ page }): Promise<void> => {
2847
+ await page.setViewportSize({ width: 1920, height: 1080 });
2848
+ const response = await page.goto('/c/select-field-new');
2849
+ expect(response?.ok()).toBeTruthy();
2850
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
2851
+ await page.waitForLoadState('networkidle');
2852
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2853
+ scrollWidth: document.documentElement.scrollWidth,
2854
+ innerWidth: window.innerWidth,
2855
+ }));
2856
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2857
+
2858
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/select-field-new/desktop-wide-light.png', fullPage: true });
2859
+
2860
+ });
2861
+ });
2862
+
2863
+ test.describe('Route: Sandbox multiselect-field-new (/c/multiselect-field-new)', (): void => {
2864
+ test('multiselect-field-new × mobile-s × dark', async ({ page }): Promise<void> => {
2865
+ await page.setViewportSize({ width: 320, height: 568 });
2866
+ const response = await page.goto('/c/multiselect-field-new');
2867
+ expect(response?.ok()).toBeTruthy();
2868
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
2869
+ await page.waitForLoadState('networkidle');
2870
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2871
+ scrollWidth: document.documentElement.scrollWidth,
2872
+ innerWidth: window.innerWidth,
2873
+ }));
2874
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2875
+
2876
+ const tooSmall = await page.evaluate((minPx: number): number => {
2877
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2878
+ let undersize: number = 0;
2879
+ tappable.forEach((el: HTMLElement): void => {
2880
+ const rect = el.getBoundingClientRect();
2881
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2882
+ undersize++;
2883
+ }
2884
+ });
2885
+ return undersize;
2886
+ }, 44);
2887
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2888
+
2889
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/multiselect-field-new/mobile-s-dark.png', fullPage: true });
2890
+
2891
+ });
2892
+
2893
+ test('multiselect-field-new × mobile-s × light', async ({ page }): Promise<void> => {
2894
+ await page.setViewportSize({ width: 320, height: 568 });
2895
+ const response = await page.goto('/c/multiselect-field-new');
2896
+ expect(response?.ok()).toBeTruthy();
2897
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
2898
+ await page.waitForLoadState('networkidle');
2899
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2900
+ scrollWidth: document.documentElement.scrollWidth,
2901
+ innerWidth: window.innerWidth,
2902
+ }));
2903
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2904
+
2905
+ const tooSmall = await page.evaluate((minPx: number): number => {
2906
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2907
+ let undersize: number = 0;
2908
+ tappable.forEach((el: HTMLElement): void => {
2909
+ const rect = el.getBoundingClientRect();
2910
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2911
+ undersize++;
2912
+ }
2913
+ });
2914
+ return undersize;
2915
+ }, 44);
2916
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2917
+
2918
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/multiselect-field-new/mobile-s-light.png', fullPage: true });
2919
+
2920
+ });
2921
+
2922
+ test('multiselect-field-new × mobile-m × dark', async ({ page }): Promise<void> => {
2923
+ await page.setViewportSize({ width: 375, height: 667 });
2924
+ const response = await page.goto('/c/multiselect-field-new');
2925
+ expect(response?.ok()).toBeTruthy();
2926
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
2927
+ await page.waitForLoadState('networkidle');
2928
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2929
+ scrollWidth: document.documentElement.scrollWidth,
2930
+ innerWidth: window.innerWidth,
2931
+ }));
2932
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2933
+
2934
+ const tooSmall = await page.evaluate((minPx: number): number => {
2935
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2936
+ let undersize: number = 0;
2937
+ tappable.forEach((el: HTMLElement): void => {
2938
+ const rect = el.getBoundingClientRect();
2939
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2940
+ undersize++;
2941
+ }
2942
+ });
2943
+ return undersize;
2944
+ }, 44);
2945
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2946
+
2947
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/multiselect-field-new/mobile-m-dark.png', fullPage: true });
2948
+
2949
+ });
2950
+
2951
+ test('multiselect-field-new × mobile-m × light', async ({ page }): Promise<void> => {
2952
+ await page.setViewportSize({ width: 375, height: 667 });
2953
+ const response = await page.goto('/c/multiselect-field-new');
2954
+ expect(response?.ok()).toBeTruthy();
2955
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
2956
+ await page.waitForLoadState('networkidle');
2957
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2958
+ scrollWidth: document.documentElement.scrollWidth,
2959
+ innerWidth: window.innerWidth,
2960
+ }));
2961
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2962
+
2963
+ const tooSmall = await page.evaluate((minPx: number): number => {
2964
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2965
+ let undersize: number = 0;
2966
+ tappable.forEach((el: HTMLElement): void => {
2967
+ const rect = el.getBoundingClientRect();
2968
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2969
+ undersize++;
2970
+ }
2971
+ });
2972
+ return undersize;
2973
+ }, 44);
2974
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
2975
+
2976
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/multiselect-field-new/mobile-m-light.png', fullPage: true });
2977
+
2978
+ });
2979
+
2980
+ test('multiselect-field-new × mobile-l × dark', async ({ page }): Promise<void> => {
2981
+ await page.setViewportSize({ width: 414, height: 896 });
2982
+ const response = await page.goto('/c/multiselect-field-new');
2983
+ expect(response?.ok()).toBeTruthy();
2984
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
2985
+ await page.waitForLoadState('networkidle');
2986
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
2987
+ scrollWidth: document.documentElement.scrollWidth,
2988
+ innerWidth: window.innerWidth,
2989
+ }));
2990
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
2991
+
2992
+ const tooSmall = await page.evaluate((minPx: number): number => {
2993
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
2994
+ let undersize: number = 0;
2995
+ tappable.forEach((el: HTMLElement): void => {
2996
+ const rect = el.getBoundingClientRect();
2997
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
2998
+ undersize++;
2999
+ }
3000
+ });
3001
+ return undersize;
3002
+ }, 44);
3003
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3004
+
3005
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/multiselect-field-new/mobile-l-dark.png', fullPage: true });
3006
+
3007
+ });
3008
+
3009
+ test('multiselect-field-new × mobile-l × light', async ({ page }): Promise<void> => {
3010
+ await page.setViewportSize({ width: 414, height: 896 });
3011
+ const response = await page.goto('/c/multiselect-field-new');
3012
+ expect(response?.ok()).toBeTruthy();
3013
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
3014
+ await page.waitForLoadState('networkidle');
3015
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3016
+ scrollWidth: document.documentElement.scrollWidth,
3017
+ innerWidth: window.innerWidth,
3018
+ }));
3019
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3020
+
3021
+ const tooSmall = await page.evaluate((minPx: number): number => {
3022
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3023
+ let undersize: number = 0;
3024
+ tappable.forEach((el: HTMLElement): void => {
3025
+ const rect = el.getBoundingClientRect();
3026
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3027
+ undersize++;
3028
+ }
3029
+ });
3030
+ return undersize;
3031
+ }, 44);
3032
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3033
+
3034
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/multiselect-field-new/mobile-l-light.png', fullPage: true });
3035
+
3036
+ });
3037
+
3038
+ test('multiselect-field-new × tablet-p × dark', async ({ page }): Promise<void> => {
3039
+ await page.setViewportSize({ width: 768, height: 1024 });
3040
+ const response = await page.goto('/c/multiselect-field-new');
3041
+ expect(response?.ok()).toBeTruthy();
3042
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
3043
+ await page.waitForLoadState('networkidle');
3044
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3045
+ scrollWidth: document.documentElement.scrollWidth,
3046
+ innerWidth: window.innerWidth,
3047
+ }));
3048
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3049
+
3050
+ const tooSmall = await page.evaluate((minPx: number): number => {
3051
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3052
+ let undersize: number = 0;
3053
+ tappable.forEach((el: HTMLElement): void => {
3054
+ const rect = el.getBoundingClientRect();
3055
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3056
+ undersize++;
3057
+ }
3058
+ });
3059
+ return undersize;
3060
+ }, 44);
3061
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3062
+
3063
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/multiselect-field-new/tablet-p-dark.png', fullPage: true });
3064
+
3065
+ });
3066
+
3067
+ test('multiselect-field-new × tablet-p × light', async ({ page }): Promise<void> => {
3068
+ await page.setViewportSize({ width: 768, height: 1024 });
3069
+ const response = await page.goto('/c/multiselect-field-new');
3070
+ expect(response?.ok()).toBeTruthy();
3071
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
3072
+ await page.waitForLoadState('networkidle');
3073
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3074
+ scrollWidth: document.documentElement.scrollWidth,
3075
+ innerWidth: window.innerWidth,
3076
+ }));
3077
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3078
+
3079
+ const tooSmall = await page.evaluate((minPx: number): number => {
3080
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3081
+ let undersize: number = 0;
3082
+ tappable.forEach((el: HTMLElement): void => {
3083
+ const rect = el.getBoundingClientRect();
3084
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3085
+ undersize++;
3086
+ }
3087
+ });
3088
+ return undersize;
3089
+ }, 44);
3090
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3091
+
3092
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/multiselect-field-new/tablet-p-light.png', fullPage: true });
3093
+
3094
+ });
3095
+
3096
+ test('multiselect-field-new × tablet-l × dark', async ({ page }): Promise<void> => {
3097
+ await page.setViewportSize({ width: 1024, height: 768 });
3098
+ const response = await page.goto('/c/multiselect-field-new');
3099
+ expect(response?.ok()).toBeTruthy();
3100
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
3101
+ await page.waitForLoadState('networkidle');
3102
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3103
+ scrollWidth: document.documentElement.scrollWidth,
3104
+ innerWidth: window.innerWidth,
3105
+ }));
3106
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3107
+
3108
+ const tooSmall = await page.evaluate((minPx: number): number => {
3109
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3110
+ let undersize: number = 0;
3111
+ tappable.forEach((el: HTMLElement): void => {
3112
+ const rect = el.getBoundingClientRect();
3113
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3114
+ undersize++;
3115
+ }
3116
+ });
3117
+ return undersize;
3118
+ }, 44);
3119
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3120
+
3121
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/multiselect-field-new/tablet-l-dark.png', fullPage: true });
3122
+
3123
+ });
3124
+
3125
+ test('multiselect-field-new × tablet-l × light', async ({ page }): Promise<void> => {
3126
+ await page.setViewportSize({ width: 1024, height: 768 });
3127
+ const response = await page.goto('/c/multiselect-field-new');
3128
+ expect(response?.ok()).toBeTruthy();
3129
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
3130
+ await page.waitForLoadState('networkidle');
3131
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3132
+ scrollWidth: document.documentElement.scrollWidth,
3133
+ innerWidth: window.innerWidth,
3134
+ }));
3135
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3136
+
3137
+ const tooSmall = await page.evaluate((minPx: number): number => {
3138
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3139
+ let undersize: number = 0;
3140
+ tappable.forEach((el: HTMLElement): void => {
3141
+ const rect = el.getBoundingClientRect();
3142
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3143
+ undersize++;
3144
+ }
3145
+ });
3146
+ return undersize;
3147
+ }, 44);
3148
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3149
+
3150
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/multiselect-field-new/tablet-l-light.png', fullPage: true });
3151
+
3152
+ });
3153
+
3154
+ test('multiselect-field-new × desktop × dark', async ({ page }): Promise<void> => {
3155
+ await page.setViewportSize({ width: 1440, height: 900 });
3156
+ const response = await page.goto('/c/multiselect-field-new');
3157
+ expect(response?.ok()).toBeTruthy();
3158
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
3159
+ await page.waitForLoadState('networkidle');
3160
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3161
+ scrollWidth: document.documentElement.scrollWidth,
3162
+ innerWidth: window.innerWidth,
3163
+ }));
3164
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3165
+
3166
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/multiselect-field-new/desktop-dark.png', fullPage: true });
3167
+
3168
+ });
3169
+
3170
+ test('multiselect-field-new × desktop × light', async ({ page }): Promise<void> => {
3171
+ await page.setViewportSize({ width: 1440, height: 900 });
3172
+ const response = await page.goto('/c/multiselect-field-new');
3173
+ expect(response?.ok()).toBeTruthy();
3174
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
3175
+ await page.waitForLoadState('networkidle');
3176
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3177
+ scrollWidth: document.documentElement.scrollWidth,
3178
+ innerWidth: window.innerWidth,
3179
+ }));
3180
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3181
+
3182
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/multiselect-field-new/desktop-light.png', fullPage: true });
3183
+
3184
+ });
3185
+
3186
+ test('multiselect-field-new × desktop-wide × dark', async ({ page }): Promise<void> => {
3187
+ await page.setViewportSize({ width: 1920, height: 1080 });
3188
+ const response = await page.goto('/c/multiselect-field-new');
3189
+ expect(response?.ok()).toBeTruthy();
3190
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
3191
+ await page.waitForLoadState('networkidle');
3192
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3193
+ scrollWidth: document.documentElement.scrollWidth,
3194
+ innerWidth: window.innerWidth,
3195
+ }));
3196
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3197
+
3198
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/multiselect-field-new/desktop-wide-dark.png', fullPage: true });
3199
+
3200
+ });
3201
+
3202
+ test('multiselect-field-new × desktop-wide × light', async ({ page }): Promise<void> => {
3203
+ await page.setViewportSize({ width: 1920, height: 1080 });
3204
+ const response = await page.goto('/c/multiselect-field-new');
3205
+ expect(response?.ok()).toBeTruthy();
3206
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
3207
+ await page.waitForLoadState('networkidle');
3208
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3209
+ scrollWidth: document.documentElement.scrollWidth,
3210
+ innerWidth: window.innerWidth,
3211
+ }));
3212
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3213
+
3214
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/multiselect-field-new/desktop-wide-light.png', fullPage: true });
3215
+
3216
+ });
3217
+ });
3218
+
3219
+ test.describe('Route: Sandbox radio-select-field-new (/c/radio-select-field-new)', (): void => {
3220
+ test('radio-select-field-new × mobile-s × dark', async ({ page }): Promise<void> => {
3221
+ await page.setViewportSize({ width: 320, height: 568 });
3222
+ const response = await page.goto('/c/radio-select-field-new');
3223
+ expect(response?.ok()).toBeTruthy();
3224
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
3225
+ await page.waitForLoadState('networkidle');
3226
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3227
+ scrollWidth: document.documentElement.scrollWidth,
3228
+ innerWidth: window.innerWidth,
3229
+ }));
3230
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3231
+
3232
+ const tooSmall = await page.evaluate((minPx: number): number => {
3233
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3234
+ let undersize: number = 0;
3235
+ tappable.forEach((el: HTMLElement): void => {
3236
+ const rect = el.getBoundingClientRect();
3237
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3238
+ undersize++;
3239
+ }
3240
+ });
3241
+ return undersize;
3242
+ }, 44);
3243
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3244
+
3245
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/radio-select-field-new/mobile-s-dark.png', fullPage: true });
3246
+
3247
+ });
3248
+
3249
+ test('radio-select-field-new × mobile-s × light', async ({ page }): Promise<void> => {
3250
+ await page.setViewportSize({ width: 320, height: 568 });
3251
+ const response = await page.goto('/c/radio-select-field-new');
3252
+ expect(response?.ok()).toBeTruthy();
3253
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
3254
+ await page.waitForLoadState('networkidle');
3255
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3256
+ scrollWidth: document.documentElement.scrollWidth,
3257
+ innerWidth: window.innerWidth,
3258
+ }));
3259
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3260
+
3261
+ const tooSmall = await page.evaluate((minPx: number): number => {
3262
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3263
+ let undersize: number = 0;
3264
+ tappable.forEach((el: HTMLElement): void => {
3265
+ const rect = el.getBoundingClientRect();
3266
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3267
+ undersize++;
3268
+ }
3269
+ });
3270
+ return undersize;
3271
+ }, 44);
3272
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3273
+
3274
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/radio-select-field-new/mobile-s-light.png', fullPage: true });
3275
+
3276
+ });
3277
+
3278
+ test('radio-select-field-new × mobile-m × dark', async ({ page }): Promise<void> => {
3279
+ await page.setViewportSize({ width: 375, height: 667 });
3280
+ const response = await page.goto('/c/radio-select-field-new');
3281
+ expect(response?.ok()).toBeTruthy();
3282
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
3283
+ await page.waitForLoadState('networkidle');
3284
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3285
+ scrollWidth: document.documentElement.scrollWidth,
3286
+ innerWidth: window.innerWidth,
3287
+ }));
3288
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3289
+
3290
+ const tooSmall = await page.evaluate((minPx: number): number => {
3291
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3292
+ let undersize: number = 0;
3293
+ tappable.forEach((el: HTMLElement): void => {
3294
+ const rect = el.getBoundingClientRect();
3295
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3296
+ undersize++;
3297
+ }
3298
+ });
3299
+ return undersize;
3300
+ }, 44);
3301
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3302
+
3303
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/radio-select-field-new/mobile-m-dark.png', fullPage: true });
3304
+
3305
+ });
3306
+
3307
+ test('radio-select-field-new × mobile-m × light', async ({ page }): Promise<void> => {
3308
+ await page.setViewportSize({ width: 375, height: 667 });
3309
+ const response = await page.goto('/c/radio-select-field-new');
3310
+ expect(response?.ok()).toBeTruthy();
3311
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
3312
+ await page.waitForLoadState('networkidle');
3313
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3314
+ scrollWidth: document.documentElement.scrollWidth,
3315
+ innerWidth: window.innerWidth,
3316
+ }));
3317
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3318
+
3319
+ const tooSmall = await page.evaluate((minPx: number): number => {
3320
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3321
+ let undersize: number = 0;
3322
+ tappable.forEach((el: HTMLElement): void => {
3323
+ const rect = el.getBoundingClientRect();
3324
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3325
+ undersize++;
3326
+ }
3327
+ });
3328
+ return undersize;
3329
+ }, 44);
3330
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3331
+
3332
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/radio-select-field-new/mobile-m-light.png', fullPage: true });
3333
+
3334
+ });
3335
+
3336
+ test('radio-select-field-new × mobile-l × dark', async ({ page }): Promise<void> => {
3337
+ await page.setViewportSize({ width: 414, height: 896 });
3338
+ const response = await page.goto('/c/radio-select-field-new');
3339
+ expect(response?.ok()).toBeTruthy();
3340
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
3341
+ await page.waitForLoadState('networkidle');
3342
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3343
+ scrollWidth: document.documentElement.scrollWidth,
3344
+ innerWidth: window.innerWidth,
3345
+ }));
3346
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3347
+
3348
+ const tooSmall = await page.evaluate((minPx: number): number => {
3349
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3350
+ let undersize: number = 0;
3351
+ tappable.forEach((el: HTMLElement): void => {
3352
+ const rect = el.getBoundingClientRect();
3353
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3354
+ undersize++;
3355
+ }
3356
+ });
3357
+ return undersize;
3358
+ }, 44);
3359
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3360
+
3361
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/radio-select-field-new/mobile-l-dark.png', fullPage: true });
3362
+
3363
+ });
3364
+
3365
+ test('radio-select-field-new × mobile-l × light', async ({ page }): Promise<void> => {
3366
+ await page.setViewportSize({ width: 414, height: 896 });
3367
+ const response = await page.goto('/c/radio-select-field-new');
3368
+ expect(response?.ok()).toBeTruthy();
3369
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
3370
+ await page.waitForLoadState('networkidle');
3371
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3372
+ scrollWidth: document.documentElement.scrollWidth,
3373
+ innerWidth: window.innerWidth,
3374
+ }));
3375
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3376
+
3377
+ const tooSmall = await page.evaluate((minPx: number): number => {
3378
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3379
+ let undersize: number = 0;
3380
+ tappable.forEach((el: HTMLElement): void => {
3381
+ const rect = el.getBoundingClientRect();
3382
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3383
+ undersize++;
3384
+ }
3385
+ });
3386
+ return undersize;
3387
+ }, 44);
3388
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3389
+
3390
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/radio-select-field-new/mobile-l-light.png', fullPage: true });
3391
+
3392
+ });
3393
+
3394
+ test('radio-select-field-new × tablet-p × dark', async ({ page }): Promise<void> => {
3395
+ await page.setViewportSize({ width: 768, height: 1024 });
3396
+ const response = await page.goto('/c/radio-select-field-new');
3397
+ expect(response?.ok()).toBeTruthy();
3398
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
3399
+ await page.waitForLoadState('networkidle');
3400
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3401
+ scrollWidth: document.documentElement.scrollWidth,
3402
+ innerWidth: window.innerWidth,
3403
+ }));
3404
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3405
+
3406
+ const tooSmall = await page.evaluate((minPx: number): number => {
3407
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3408
+ let undersize: number = 0;
3409
+ tappable.forEach((el: HTMLElement): void => {
3410
+ const rect = el.getBoundingClientRect();
3411
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3412
+ undersize++;
3413
+ }
3414
+ });
3415
+ return undersize;
3416
+ }, 44);
3417
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3418
+
3419
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/radio-select-field-new/tablet-p-dark.png', fullPage: true });
3420
+
3421
+ });
3422
+
3423
+ test('radio-select-field-new × tablet-p × light', async ({ page }): Promise<void> => {
3424
+ await page.setViewportSize({ width: 768, height: 1024 });
3425
+ const response = await page.goto('/c/radio-select-field-new');
3426
+ expect(response?.ok()).toBeTruthy();
3427
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
3428
+ await page.waitForLoadState('networkidle');
3429
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3430
+ scrollWidth: document.documentElement.scrollWidth,
3431
+ innerWidth: window.innerWidth,
3432
+ }));
3433
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3434
+
3435
+ const tooSmall = await page.evaluate((minPx: number): number => {
3436
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3437
+ let undersize: number = 0;
3438
+ tappable.forEach((el: HTMLElement): void => {
3439
+ const rect = el.getBoundingClientRect();
3440
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3441
+ undersize++;
3442
+ }
3443
+ });
3444
+ return undersize;
3445
+ }, 44);
3446
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3447
+
3448
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/radio-select-field-new/tablet-p-light.png', fullPage: true });
3449
+
3450
+ });
3451
+
3452
+ test('radio-select-field-new × tablet-l × dark', async ({ page }): Promise<void> => {
3453
+ await page.setViewportSize({ width: 1024, height: 768 });
3454
+ const response = await page.goto('/c/radio-select-field-new');
3455
+ expect(response?.ok()).toBeTruthy();
3456
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
3457
+ await page.waitForLoadState('networkidle');
3458
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3459
+ scrollWidth: document.documentElement.scrollWidth,
3460
+ innerWidth: window.innerWidth,
3461
+ }));
3462
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3463
+
3464
+ const tooSmall = await page.evaluate((minPx: number): number => {
3465
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3466
+ let undersize: number = 0;
3467
+ tappable.forEach((el: HTMLElement): void => {
3468
+ const rect = el.getBoundingClientRect();
3469
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3470
+ undersize++;
3471
+ }
3472
+ });
3473
+ return undersize;
3474
+ }, 44);
3475
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3476
+
3477
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/radio-select-field-new/tablet-l-dark.png', fullPage: true });
3478
+
3479
+ });
3480
+
3481
+ test('radio-select-field-new × tablet-l × light', async ({ page }): Promise<void> => {
3482
+ await page.setViewportSize({ width: 1024, height: 768 });
3483
+ const response = await page.goto('/c/radio-select-field-new');
3484
+ expect(response?.ok()).toBeTruthy();
3485
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
3486
+ await page.waitForLoadState('networkidle');
3487
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3488
+ scrollWidth: document.documentElement.scrollWidth,
3489
+ innerWidth: window.innerWidth,
3490
+ }));
3491
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3492
+
3493
+ const tooSmall = await page.evaluate((minPx: number): number => {
3494
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3495
+ let undersize: number = 0;
3496
+ tappable.forEach((el: HTMLElement): void => {
3497
+ const rect = el.getBoundingClientRect();
3498
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3499
+ undersize++;
3500
+ }
3501
+ });
3502
+ return undersize;
3503
+ }, 44);
3504
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3505
+
3506
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/radio-select-field-new/tablet-l-light.png', fullPage: true });
3507
+
3508
+ });
3509
+
3510
+ test('radio-select-field-new × desktop × dark', async ({ page }): Promise<void> => {
3511
+ await page.setViewportSize({ width: 1440, height: 900 });
3512
+ const response = await page.goto('/c/radio-select-field-new');
3513
+ expect(response?.ok()).toBeTruthy();
3514
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
3515
+ await page.waitForLoadState('networkidle');
3516
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3517
+ scrollWidth: document.documentElement.scrollWidth,
3518
+ innerWidth: window.innerWidth,
3519
+ }));
3520
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3521
+
3522
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/radio-select-field-new/desktop-dark.png', fullPage: true });
3523
+
3524
+ });
3525
+
3526
+ test('radio-select-field-new × desktop × light', async ({ page }): Promise<void> => {
3527
+ await page.setViewportSize({ width: 1440, height: 900 });
3528
+ const response = await page.goto('/c/radio-select-field-new');
3529
+ expect(response?.ok()).toBeTruthy();
3530
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
3531
+ await page.waitForLoadState('networkidle');
3532
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3533
+ scrollWidth: document.documentElement.scrollWidth,
3534
+ innerWidth: window.innerWidth,
3535
+ }));
3536
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3537
+
3538
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/radio-select-field-new/desktop-light.png', fullPage: true });
3539
+
3540
+ });
3541
+
3542
+ test('radio-select-field-new × desktop-wide × dark', async ({ page }): Promise<void> => {
3543
+ await page.setViewportSize({ width: 1920, height: 1080 });
3544
+ const response = await page.goto('/c/radio-select-field-new');
3545
+ expect(response?.ok()).toBeTruthy();
3546
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
3547
+ await page.waitForLoadState('networkidle');
3548
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3549
+ scrollWidth: document.documentElement.scrollWidth,
3550
+ innerWidth: window.innerWidth,
3551
+ }));
3552
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3553
+
3554
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/radio-select-field-new/desktop-wide-dark.png', fullPage: true });
3555
+
3556
+ });
3557
+
3558
+ test('radio-select-field-new × desktop-wide × light', async ({ page }): Promise<void> => {
3559
+ await page.setViewportSize({ width: 1920, height: 1080 });
3560
+ const response = await page.goto('/c/radio-select-field-new');
3561
+ expect(response?.ok()).toBeTruthy();
3562
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
3563
+ await page.waitForLoadState('networkidle');
3564
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3565
+ scrollWidth: document.documentElement.scrollWidth,
3566
+ innerWidth: window.innerWidth,
3567
+ }));
3568
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3569
+
3570
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/radio-select-field-new/desktop-wide-light.png', fullPage: true });
3571
+
3572
+ });
3573
+ });
3574
+
3575
+ test.describe('Route: Sandbox date-field-new (/c/date-field-new)', (): void => {
3576
+ test('date-field-new × mobile-s × dark', async ({ page }): Promise<void> => {
3577
+ await page.setViewportSize({ width: 320, height: 568 });
3578
+ const response = await page.goto('/c/date-field-new');
3579
+ expect(response?.ok()).toBeTruthy();
3580
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
3581
+ await page.waitForLoadState('networkidle');
3582
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3583
+ scrollWidth: document.documentElement.scrollWidth,
3584
+ innerWidth: window.innerWidth,
3585
+ }));
3586
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3587
+
3588
+ const tooSmall = await page.evaluate((minPx: number): number => {
3589
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3590
+ let undersize: number = 0;
3591
+ tappable.forEach((el: HTMLElement): void => {
3592
+ const rect = el.getBoundingClientRect();
3593
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3594
+ undersize++;
3595
+ }
3596
+ });
3597
+ return undersize;
3598
+ }, 44);
3599
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3600
+
3601
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-field-new/mobile-s-dark.png', fullPage: true });
3602
+
3603
+ });
3604
+
3605
+ test('date-field-new × mobile-s × light', async ({ page }): Promise<void> => {
3606
+ await page.setViewportSize({ width: 320, height: 568 });
3607
+ const response = await page.goto('/c/date-field-new');
3608
+ expect(response?.ok()).toBeTruthy();
3609
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
3610
+ await page.waitForLoadState('networkidle');
3611
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3612
+ scrollWidth: document.documentElement.scrollWidth,
3613
+ innerWidth: window.innerWidth,
3614
+ }));
3615
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3616
+
3617
+ const tooSmall = await page.evaluate((minPx: number): number => {
3618
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3619
+ let undersize: number = 0;
3620
+ tappable.forEach((el: HTMLElement): void => {
3621
+ const rect = el.getBoundingClientRect();
3622
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3623
+ undersize++;
3624
+ }
3625
+ });
3626
+ return undersize;
3627
+ }, 44);
3628
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3629
+
3630
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-field-new/mobile-s-light.png', fullPage: true });
3631
+
3632
+ });
3633
+
3634
+ test('date-field-new × mobile-m × dark', async ({ page }): Promise<void> => {
3635
+ await page.setViewportSize({ width: 375, height: 667 });
3636
+ const response = await page.goto('/c/date-field-new');
3637
+ expect(response?.ok()).toBeTruthy();
3638
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
3639
+ await page.waitForLoadState('networkidle');
3640
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3641
+ scrollWidth: document.documentElement.scrollWidth,
3642
+ innerWidth: window.innerWidth,
3643
+ }));
3644
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3645
+
3646
+ const tooSmall = await page.evaluate((minPx: number): number => {
3647
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3648
+ let undersize: number = 0;
3649
+ tappable.forEach((el: HTMLElement): void => {
3650
+ const rect = el.getBoundingClientRect();
3651
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3652
+ undersize++;
3653
+ }
3654
+ });
3655
+ return undersize;
3656
+ }, 44);
3657
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3658
+
3659
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-field-new/mobile-m-dark.png', fullPage: true });
3660
+
3661
+ });
3662
+
3663
+ test('date-field-new × mobile-m × light', async ({ page }): Promise<void> => {
3664
+ await page.setViewportSize({ width: 375, height: 667 });
3665
+ const response = await page.goto('/c/date-field-new');
3666
+ expect(response?.ok()).toBeTruthy();
3667
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
3668
+ await page.waitForLoadState('networkidle');
3669
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3670
+ scrollWidth: document.documentElement.scrollWidth,
3671
+ innerWidth: window.innerWidth,
3672
+ }));
3673
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3674
+
3675
+ const tooSmall = await page.evaluate((minPx: number): number => {
3676
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3677
+ let undersize: number = 0;
3678
+ tappable.forEach((el: HTMLElement): void => {
3679
+ const rect = el.getBoundingClientRect();
3680
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3681
+ undersize++;
3682
+ }
3683
+ });
3684
+ return undersize;
3685
+ }, 44);
3686
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3687
+
3688
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-field-new/mobile-m-light.png', fullPage: true });
3689
+
3690
+ });
3691
+
3692
+ test('date-field-new × mobile-l × dark', async ({ page }): Promise<void> => {
3693
+ await page.setViewportSize({ width: 414, height: 896 });
3694
+ const response = await page.goto('/c/date-field-new');
3695
+ expect(response?.ok()).toBeTruthy();
3696
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
3697
+ await page.waitForLoadState('networkidle');
3698
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3699
+ scrollWidth: document.documentElement.scrollWidth,
3700
+ innerWidth: window.innerWidth,
3701
+ }));
3702
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3703
+
3704
+ const tooSmall = await page.evaluate((minPx: number): number => {
3705
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3706
+ let undersize: number = 0;
3707
+ tappable.forEach((el: HTMLElement): void => {
3708
+ const rect = el.getBoundingClientRect();
3709
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3710
+ undersize++;
3711
+ }
3712
+ });
3713
+ return undersize;
3714
+ }, 44);
3715
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3716
+
3717
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-field-new/mobile-l-dark.png', fullPage: true });
3718
+
3719
+ });
3720
+
3721
+ test('date-field-new × mobile-l × light', async ({ page }): Promise<void> => {
3722
+ await page.setViewportSize({ width: 414, height: 896 });
3723
+ const response = await page.goto('/c/date-field-new');
3724
+ expect(response?.ok()).toBeTruthy();
3725
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
3726
+ await page.waitForLoadState('networkidle');
3727
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3728
+ scrollWidth: document.documentElement.scrollWidth,
3729
+ innerWidth: window.innerWidth,
3730
+ }));
3731
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3732
+
3733
+ const tooSmall = await page.evaluate((minPx: number): number => {
3734
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3735
+ let undersize: number = 0;
3736
+ tappable.forEach((el: HTMLElement): void => {
3737
+ const rect = el.getBoundingClientRect();
3738
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3739
+ undersize++;
3740
+ }
3741
+ });
3742
+ return undersize;
3743
+ }, 44);
3744
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3745
+
3746
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-field-new/mobile-l-light.png', fullPage: true });
3747
+
3748
+ });
3749
+
3750
+ test('date-field-new × tablet-p × dark', async ({ page }): Promise<void> => {
3751
+ await page.setViewportSize({ width: 768, height: 1024 });
3752
+ const response = await page.goto('/c/date-field-new');
3753
+ expect(response?.ok()).toBeTruthy();
3754
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
3755
+ await page.waitForLoadState('networkidle');
3756
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3757
+ scrollWidth: document.documentElement.scrollWidth,
3758
+ innerWidth: window.innerWidth,
3759
+ }));
3760
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3761
+
3762
+ const tooSmall = await page.evaluate((minPx: number): number => {
3763
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3764
+ let undersize: number = 0;
3765
+ tappable.forEach((el: HTMLElement): void => {
3766
+ const rect = el.getBoundingClientRect();
3767
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3768
+ undersize++;
3769
+ }
3770
+ });
3771
+ return undersize;
3772
+ }, 44);
3773
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3774
+
3775
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-field-new/tablet-p-dark.png', fullPage: true });
3776
+
3777
+ });
3778
+
3779
+ test('date-field-new × tablet-p × light', async ({ page }): Promise<void> => {
3780
+ await page.setViewportSize({ width: 768, height: 1024 });
3781
+ const response = await page.goto('/c/date-field-new');
3782
+ expect(response?.ok()).toBeTruthy();
3783
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
3784
+ await page.waitForLoadState('networkidle');
3785
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3786
+ scrollWidth: document.documentElement.scrollWidth,
3787
+ innerWidth: window.innerWidth,
3788
+ }));
3789
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3790
+
3791
+ const tooSmall = await page.evaluate((minPx: number): number => {
3792
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3793
+ let undersize: number = 0;
3794
+ tappable.forEach((el: HTMLElement): void => {
3795
+ const rect = el.getBoundingClientRect();
3796
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3797
+ undersize++;
3798
+ }
3799
+ });
3800
+ return undersize;
3801
+ }, 44);
3802
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3803
+
3804
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-field-new/tablet-p-light.png', fullPage: true });
3805
+
3806
+ });
3807
+
3808
+ test('date-field-new × tablet-l × dark', async ({ page }): Promise<void> => {
3809
+ await page.setViewportSize({ width: 1024, height: 768 });
3810
+ const response = await page.goto('/c/date-field-new');
3811
+ expect(response?.ok()).toBeTruthy();
3812
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
3813
+ await page.waitForLoadState('networkidle');
3814
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3815
+ scrollWidth: document.documentElement.scrollWidth,
3816
+ innerWidth: window.innerWidth,
3817
+ }));
3818
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3819
+
3820
+ const tooSmall = await page.evaluate((minPx: number): number => {
3821
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3822
+ let undersize: number = 0;
3823
+ tappable.forEach((el: HTMLElement): void => {
3824
+ const rect = el.getBoundingClientRect();
3825
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3826
+ undersize++;
3827
+ }
3828
+ });
3829
+ return undersize;
3830
+ }, 44);
3831
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3832
+
3833
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-field-new/tablet-l-dark.png', fullPage: true });
3834
+
3835
+ });
3836
+
3837
+ test('date-field-new × tablet-l × light', async ({ page }): Promise<void> => {
3838
+ await page.setViewportSize({ width: 1024, height: 768 });
3839
+ const response = await page.goto('/c/date-field-new');
3840
+ expect(response?.ok()).toBeTruthy();
3841
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
3842
+ await page.waitForLoadState('networkidle');
3843
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3844
+ scrollWidth: document.documentElement.scrollWidth,
3845
+ innerWidth: window.innerWidth,
3846
+ }));
3847
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3848
+
3849
+ const tooSmall = await page.evaluate((minPx: number): number => {
3850
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3851
+ let undersize: number = 0;
3852
+ tappable.forEach((el: HTMLElement): void => {
3853
+ const rect = el.getBoundingClientRect();
3854
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3855
+ undersize++;
3856
+ }
3857
+ });
3858
+ return undersize;
3859
+ }, 44);
3860
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3861
+
3862
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-field-new/tablet-l-light.png', fullPage: true });
3863
+
3864
+ });
3865
+
3866
+ test('date-field-new × desktop × dark', async ({ page }): Promise<void> => {
3867
+ await page.setViewportSize({ width: 1440, height: 900 });
3868
+ const response = await page.goto('/c/date-field-new');
3869
+ expect(response?.ok()).toBeTruthy();
3870
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
3871
+ await page.waitForLoadState('networkidle');
3872
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3873
+ scrollWidth: document.documentElement.scrollWidth,
3874
+ innerWidth: window.innerWidth,
3875
+ }));
3876
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3877
+
3878
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-field-new/desktop-dark.png', fullPage: true });
3879
+
3880
+ });
3881
+
3882
+ test('date-field-new × desktop × light', async ({ page }): Promise<void> => {
3883
+ await page.setViewportSize({ width: 1440, height: 900 });
3884
+ const response = await page.goto('/c/date-field-new');
3885
+ expect(response?.ok()).toBeTruthy();
3886
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
3887
+ await page.waitForLoadState('networkidle');
3888
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3889
+ scrollWidth: document.documentElement.scrollWidth,
3890
+ innerWidth: window.innerWidth,
3891
+ }));
3892
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3893
+
3894
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-field-new/desktop-light.png', fullPage: true });
3895
+
3896
+ });
3897
+
3898
+ test('date-field-new × desktop-wide × dark', async ({ page }): Promise<void> => {
3899
+ await page.setViewportSize({ width: 1920, height: 1080 });
3900
+ const response = await page.goto('/c/date-field-new');
3901
+ expect(response?.ok()).toBeTruthy();
3902
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
3903
+ await page.waitForLoadState('networkidle');
3904
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3905
+ scrollWidth: document.documentElement.scrollWidth,
3906
+ innerWidth: window.innerWidth,
3907
+ }));
3908
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3909
+
3910
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-field-new/desktop-wide-dark.png', fullPage: true });
3911
+
3912
+ });
3913
+
3914
+ test('date-field-new × desktop-wide × light', async ({ page }): Promise<void> => {
3915
+ await page.setViewportSize({ width: 1920, height: 1080 });
3916
+ const response = await page.goto('/c/date-field-new');
3917
+ expect(response?.ok()).toBeTruthy();
3918
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
3919
+ await page.waitForLoadState('networkidle');
3920
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3921
+ scrollWidth: document.documentElement.scrollWidth,
3922
+ innerWidth: window.innerWidth,
3923
+ }));
3924
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3925
+
3926
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-field-new/desktop-wide-light.png', fullPage: true });
3927
+
3928
+ });
3929
+ });
3930
+
3931
+ test.describe('Route: Sandbox datetime-field-new (/c/datetime-field-new)', (): void => {
3932
+ test('datetime-field-new × mobile-s × dark', async ({ page }): Promise<void> => {
3933
+ await page.setViewportSize({ width: 320, height: 568 });
3934
+ const response = await page.goto('/c/datetime-field-new');
3935
+ expect(response?.ok()).toBeTruthy();
3936
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
3937
+ await page.waitForLoadState('networkidle');
3938
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3939
+ scrollWidth: document.documentElement.scrollWidth,
3940
+ innerWidth: window.innerWidth,
3941
+ }));
3942
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3943
+
3944
+ const tooSmall = await page.evaluate((minPx: number): number => {
3945
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3946
+ let undersize: number = 0;
3947
+ tappable.forEach((el: HTMLElement): void => {
3948
+ const rect = el.getBoundingClientRect();
3949
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3950
+ undersize++;
3951
+ }
3952
+ });
3953
+ return undersize;
3954
+ }, 44);
3955
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3956
+
3957
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/datetime-field-new/mobile-s-dark.png', fullPage: true });
3958
+
3959
+ });
3960
+
3961
+ test('datetime-field-new × mobile-s × light', async ({ page }): Promise<void> => {
3962
+ await page.setViewportSize({ width: 320, height: 568 });
3963
+ const response = await page.goto('/c/datetime-field-new');
3964
+ expect(response?.ok()).toBeTruthy();
3965
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
3966
+ await page.waitForLoadState('networkidle');
3967
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3968
+ scrollWidth: document.documentElement.scrollWidth,
3969
+ innerWidth: window.innerWidth,
3970
+ }));
3971
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
3972
+
3973
+ const tooSmall = await page.evaluate((minPx: number): number => {
3974
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
3975
+ let undersize: number = 0;
3976
+ tappable.forEach((el: HTMLElement): void => {
3977
+ const rect = el.getBoundingClientRect();
3978
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
3979
+ undersize++;
3980
+ }
3981
+ });
3982
+ return undersize;
3983
+ }, 44);
3984
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
3985
+
3986
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/datetime-field-new/mobile-s-light.png', fullPage: true });
3987
+
3988
+ });
3989
+
3990
+ test('datetime-field-new × mobile-m × dark', async ({ page }): Promise<void> => {
3991
+ await page.setViewportSize({ width: 375, height: 667 });
3992
+ const response = await page.goto('/c/datetime-field-new');
3993
+ expect(response?.ok()).toBeTruthy();
3994
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
3995
+ await page.waitForLoadState('networkidle');
3996
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
3997
+ scrollWidth: document.documentElement.scrollWidth,
3998
+ innerWidth: window.innerWidth,
3999
+ }));
4000
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4001
+
4002
+ const tooSmall = await page.evaluate((minPx: number): number => {
4003
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
4004
+ let undersize: number = 0;
4005
+ tappable.forEach((el: HTMLElement): void => {
4006
+ const rect = el.getBoundingClientRect();
4007
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
4008
+ undersize++;
4009
+ }
4010
+ });
4011
+ return undersize;
4012
+ }, 44);
4013
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
4014
+
4015
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/datetime-field-new/mobile-m-dark.png', fullPage: true });
4016
+
4017
+ });
4018
+
4019
+ test('datetime-field-new × mobile-m × light', async ({ page }): Promise<void> => {
4020
+ await page.setViewportSize({ width: 375, height: 667 });
4021
+ const response = await page.goto('/c/datetime-field-new');
4022
+ expect(response?.ok()).toBeTruthy();
4023
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
4024
+ await page.waitForLoadState('networkidle');
4025
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4026
+ scrollWidth: document.documentElement.scrollWidth,
4027
+ innerWidth: window.innerWidth,
4028
+ }));
4029
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4030
+
4031
+ const tooSmall = await page.evaluate((minPx: number): number => {
4032
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
4033
+ let undersize: number = 0;
4034
+ tappable.forEach((el: HTMLElement): void => {
4035
+ const rect = el.getBoundingClientRect();
4036
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
4037
+ undersize++;
4038
+ }
4039
+ });
4040
+ return undersize;
4041
+ }, 44);
4042
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
4043
+
4044
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/datetime-field-new/mobile-m-light.png', fullPage: true });
4045
+
4046
+ });
4047
+
4048
+ test('datetime-field-new × mobile-l × dark', async ({ page }): Promise<void> => {
4049
+ await page.setViewportSize({ width: 414, height: 896 });
4050
+ const response = await page.goto('/c/datetime-field-new');
4051
+ expect(response?.ok()).toBeTruthy();
4052
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
4053
+ await page.waitForLoadState('networkidle');
4054
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4055
+ scrollWidth: document.documentElement.scrollWidth,
4056
+ innerWidth: window.innerWidth,
4057
+ }));
4058
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4059
+
4060
+ const tooSmall = await page.evaluate((minPx: number): number => {
4061
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
4062
+ let undersize: number = 0;
4063
+ tappable.forEach((el: HTMLElement): void => {
4064
+ const rect = el.getBoundingClientRect();
4065
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
4066
+ undersize++;
4067
+ }
4068
+ });
4069
+ return undersize;
4070
+ }, 44);
4071
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
4072
+
4073
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/datetime-field-new/mobile-l-dark.png', fullPage: true });
4074
+
4075
+ });
4076
+
4077
+ test('datetime-field-new × mobile-l × light', async ({ page }): Promise<void> => {
4078
+ await page.setViewportSize({ width: 414, height: 896 });
4079
+ const response = await page.goto('/c/datetime-field-new');
4080
+ expect(response?.ok()).toBeTruthy();
4081
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
4082
+ await page.waitForLoadState('networkidle');
4083
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4084
+ scrollWidth: document.documentElement.scrollWidth,
4085
+ innerWidth: window.innerWidth,
4086
+ }));
4087
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4088
+
4089
+ const tooSmall = await page.evaluate((minPx: number): number => {
4090
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
4091
+ let undersize: number = 0;
4092
+ tappable.forEach((el: HTMLElement): void => {
4093
+ const rect = el.getBoundingClientRect();
4094
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
4095
+ undersize++;
4096
+ }
4097
+ });
4098
+ return undersize;
4099
+ }, 44);
4100
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
4101
+
4102
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/datetime-field-new/mobile-l-light.png', fullPage: true });
4103
+
4104
+ });
4105
+
4106
+ test('datetime-field-new × tablet-p × dark', async ({ page }): Promise<void> => {
4107
+ await page.setViewportSize({ width: 768, height: 1024 });
4108
+ const response = await page.goto('/c/datetime-field-new');
4109
+ expect(response?.ok()).toBeTruthy();
4110
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
4111
+ await page.waitForLoadState('networkidle');
4112
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4113
+ scrollWidth: document.documentElement.scrollWidth,
4114
+ innerWidth: window.innerWidth,
4115
+ }));
4116
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4117
+
4118
+ const tooSmall = await page.evaluate((minPx: number): number => {
4119
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
4120
+ let undersize: number = 0;
4121
+ tappable.forEach((el: HTMLElement): void => {
4122
+ const rect = el.getBoundingClientRect();
4123
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
4124
+ undersize++;
4125
+ }
4126
+ });
4127
+ return undersize;
4128
+ }, 44);
4129
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
4130
+
4131
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/datetime-field-new/tablet-p-dark.png', fullPage: true });
4132
+
4133
+ });
4134
+
4135
+ test('datetime-field-new × tablet-p × light', async ({ page }): Promise<void> => {
4136
+ await page.setViewportSize({ width: 768, height: 1024 });
4137
+ const response = await page.goto('/c/datetime-field-new');
4138
+ expect(response?.ok()).toBeTruthy();
4139
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
4140
+ await page.waitForLoadState('networkidle');
4141
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4142
+ scrollWidth: document.documentElement.scrollWidth,
4143
+ innerWidth: window.innerWidth,
4144
+ }));
4145
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4146
+
4147
+ const tooSmall = await page.evaluate((minPx: number): number => {
4148
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
4149
+ let undersize: number = 0;
4150
+ tappable.forEach((el: HTMLElement): void => {
4151
+ const rect = el.getBoundingClientRect();
4152
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
4153
+ undersize++;
4154
+ }
4155
+ });
4156
+ return undersize;
4157
+ }, 44);
4158
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
4159
+
4160
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/datetime-field-new/tablet-p-light.png', fullPage: true });
4161
+
4162
+ });
4163
+
4164
+ test('datetime-field-new × tablet-l × dark', async ({ page }): Promise<void> => {
4165
+ await page.setViewportSize({ width: 1024, height: 768 });
4166
+ const response = await page.goto('/c/datetime-field-new');
4167
+ expect(response?.ok()).toBeTruthy();
4168
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
4169
+ await page.waitForLoadState('networkidle');
4170
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4171
+ scrollWidth: document.documentElement.scrollWidth,
4172
+ innerWidth: window.innerWidth,
4173
+ }));
4174
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4175
+
4176
+ const tooSmall = await page.evaluate((minPx: number): number => {
4177
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
4178
+ let undersize: number = 0;
4179
+ tappable.forEach((el: HTMLElement): void => {
4180
+ const rect = el.getBoundingClientRect();
4181
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
4182
+ undersize++;
4183
+ }
4184
+ });
4185
+ return undersize;
4186
+ }, 44);
4187
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
4188
+
4189
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/datetime-field-new/tablet-l-dark.png', fullPage: true });
4190
+
4191
+ });
4192
+
4193
+ test('datetime-field-new × tablet-l × light', async ({ page }): Promise<void> => {
4194
+ await page.setViewportSize({ width: 1024, height: 768 });
4195
+ const response = await page.goto('/c/datetime-field-new');
4196
+ expect(response?.ok()).toBeTruthy();
4197
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
4198
+ await page.waitForLoadState('networkidle');
4199
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4200
+ scrollWidth: document.documentElement.scrollWidth,
4201
+ innerWidth: window.innerWidth,
4202
+ }));
4203
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4204
+
4205
+ const tooSmall = await page.evaluate((minPx: number): number => {
4206
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
4207
+ let undersize: number = 0;
4208
+ tappable.forEach((el: HTMLElement): void => {
4209
+ const rect = el.getBoundingClientRect();
4210
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
4211
+ undersize++;
4212
+ }
4213
+ });
4214
+ return undersize;
4215
+ }, 44);
4216
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
4217
+
4218
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/datetime-field-new/tablet-l-light.png', fullPage: true });
4219
+
4220
+ });
4221
+
4222
+ test('datetime-field-new × desktop × dark', async ({ page }): Promise<void> => {
4223
+ await page.setViewportSize({ width: 1440, height: 900 });
4224
+ const response = await page.goto('/c/datetime-field-new');
4225
+ expect(response?.ok()).toBeTruthy();
4226
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
4227
+ await page.waitForLoadState('networkidle');
4228
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4229
+ scrollWidth: document.documentElement.scrollWidth,
4230
+ innerWidth: window.innerWidth,
4231
+ }));
4232
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4233
+
4234
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/datetime-field-new/desktop-dark.png', fullPage: true });
4235
+
4236
+ });
4237
+
4238
+ test('datetime-field-new × desktop × light', async ({ page }): Promise<void> => {
4239
+ await page.setViewportSize({ width: 1440, height: 900 });
4240
+ const response = await page.goto('/c/datetime-field-new');
4241
+ expect(response?.ok()).toBeTruthy();
4242
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
4243
+ await page.waitForLoadState('networkidle');
4244
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4245
+ scrollWidth: document.documentElement.scrollWidth,
4246
+ innerWidth: window.innerWidth,
4247
+ }));
4248
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4249
+
4250
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/datetime-field-new/desktop-light.png', fullPage: true });
4251
+
4252
+ });
4253
+
4254
+ test('datetime-field-new × desktop-wide × dark', async ({ page }): Promise<void> => {
4255
+ await page.setViewportSize({ width: 1920, height: 1080 });
4256
+ const response = await page.goto('/c/datetime-field-new');
4257
+ expect(response?.ok()).toBeTruthy();
4258
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
4259
+ await page.waitForLoadState('networkidle');
4260
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4261
+ scrollWidth: document.documentElement.scrollWidth,
4262
+ innerWidth: window.innerWidth,
4263
+ }));
4264
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4265
+
4266
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/datetime-field-new/desktop-wide-dark.png', fullPage: true });
4267
+
4268
+ });
4269
+
4270
+ test('datetime-field-new × desktop-wide × light', async ({ page }): Promise<void> => {
4271
+ await page.setViewportSize({ width: 1920, height: 1080 });
4272
+ const response = await page.goto('/c/datetime-field-new');
4273
+ expect(response?.ok()).toBeTruthy();
4274
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
4275
+ await page.waitForLoadState('networkidle');
4276
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4277
+ scrollWidth: document.documentElement.scrollWidth,
4278
+ innerWidth: window.innerWidth,
4279
+ }));
4280
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4281
+
4282
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/datetime-field-new/desktop-wide-light.png', fullPage: true });
4283
+
4284
+ });
4285
+ });
4286
+
4287
+ test.describe('Route: Sandbox date-range-field-new (/c/date-range-field-new)', (): void => {
4288
+ test('date-range-field-new × mobile-s × dark', async ({ page }): Promise<void> => {
4289
+ await page.setViewportSize({ width: 320, height: 568 });
4290
+ const response = await page.goto('/c/date-range-field-new');
4291
+ expect(response?.ok()).toBeTruthy();
4292
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
4293
+ await page.waitForLoadState('networkidle');
4294
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4295
+ scrollWidth: document.documentElement.scrollWidth,
4296
+ innerWidth: window.innerWidth,
4297
+ }));
4298
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4299
+
4300
+ const tooSmall = await page.evaluate((minPx: number): number => {
4301
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
4302
+ let undersize: number = 0;
4303
+ tappable.forEach((el: HTMLElement): void => {
4304
+ const rect = el.getBoundingClientRect();
4305
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
4306
+ undersize++;
4307
+ }
4308
+ });
4309
+ return undersize;
4310
+ }, 44);
4311
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
4312
+
4313
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-range-field-new/mobile-s-dark.png', fullPage: true });
4314
+
4315
+ });
4316
+
4317
+ test('date-range-field-new × mobile-s × light', async ({ page }): Promise<void> => {
4318
+ await page.setViewportSize({ width: 320, height: 568 });
4319
+ const response = await page.goto('/c/date-range-field-new');
4320
+ expect(response?.ok()).toBeTruthy();
4321
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
4322
+ await page.waitForLoadState('networkidle');
4323
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4324
+ scrollWidth: document.documentElement.scrollWidth,
4325
+ innerWidth: window.innerWidth,
4326
+ }));
4327
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4328
+
4329
+ const tooSmall = await page.evaluate((minPx: number): number => {
4330
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
4331
+ let undersize: number = 0;
4332
+ tappable.forEach((el: HTMLElement): void => {
4333
+ const rect = el.getBoundingClientRect();
4334
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
4335
+ undersize++;
4336
+ }
4337
+ });
4338
+ return undersize;
4339
+ }, 44);
4340
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
4341
+
4342
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-range-field-new/mobile-s-light.png', fullPage: true });
4343
+
4344
+ });
4345
+
4346
+ test('date-range-field-new × mobile-m × dark', async ({ page }): Promise<void> => {
4347
+ await page.setViewportSize({ width: 375, height: 667 });
4348
+ const response = await page.goto('/c/date-range-field-new');
4349
+ expect(response?.ok()).toBeTruthy();
4350
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
4351
+ await page.waitForLoadState('networkidle');
4352
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4353
+ scrollWidth: document.documentElement.scrollWidth,
4354
+ innerWidth: window.innerWidth,
4355
+ }));
4356
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4357
+
4358
+ const tooSmall = await page.evaluate((minPx: number): number => {
4359
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
4360
+ let undersize: number = 0;
4361
+ tappable.forEach((el: HTMLElement): void => {
4362
+ const rect = el.getBoundingClientRect();
4363
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
4364
+ undersize++;
4365
+ }
4366
+ });
4367
+ return undersize;
4368
+ }, 44);
4369
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
4370
+
4371
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-range-field-new/mobile-m-dark.png', fullPage: true });
4372
+
4373
+ });
4374
+
4375
+ test('date-range-field-new × mobile-m × light', async ({ page }): Promise<void> => {
4376
+ await page.setViewportSize({ width: 375, height: 667 });
4377
+ const response = await page.goto('/c/date-range-field-new');
4378
+ expect(response?.ok()).toBeTruthy();
4379
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
4380
+ await page.waitForLoadState('networkidle');
4381
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4382
+ scrollWidth: document.documentElement.scrollWidth,
4383
+ innerWidth: window.innerWidth,
4384
+ }));
4385
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4386
+
4387
+ const tooSmall = await page.evaluate((minPx: number): number => {
4388
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
4389
+ let undersize: number = 0;
4390
+ tappable.forEach((el: HTMLElement): void => {
4391
+ const rect = el.getBoundingClientRect();
4392
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
4393
+ undersize++;
4394
+ }
4395
+ });
4396
+ return undersize;
4397
+ }, 44);
4398
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
4399
+
4400
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-range-field-new/mobile-m-light.png', fullPage: true });
4401
+
4402
+ });
4403
+
4404
+ test('date-range-field-new × mobile-l × dark', async ({ page }): Promise<void> => {
4405
+ await page.setViewportSize({ width: 414, height: 896 });
4406
+ const response = await page.goto('/c/date-range-field-new');
4407
+ expect(response?.ok()).toBeTruthy();
4408
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
4409
+ await page.waitForLoadState('networkidle');
4410
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4411
+ scrollWidth: document.documentElement.scrollWidth,
4412
+ innerWidth: window.innerWidth,
4413
+ }));
4414
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4415
+
4416
+ const tooSmall = await page.evaluate((minPx: number): number => {
4417
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
4418
+ let undersize: number = 0;
4419
+ tappable.forEach((el: HTMLElement): void => {
4420
+ const rect = el.getBoundingClientRect();
4421
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
4422
+ undersize++;
4423
+ }
4424
+ });
4425
+ return undersize;
4426
+ }, 44);
4427
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
4428
+
4429
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-range-field-new/mobile-l-dark.png', fullPage: true });
4430
+
4431
+ });
4432
+
4433
+ test('date-range-field-new × mobile-l × light', async ({ page }): Promise<void> => {
4434
+ await page.setViewportSize({ width: 414, height: 896 });
4435
+ const response = await page.goto('/c/date-range-field-new');
4436
+ expect(response?.ok()).toBeTruthy();
4437
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
4438
+ await page.waitForLoadState('networkidle');
4439
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4440
+ scrollWidth: document.documentElement.scrollWidth,
4441
+ innerWidth: window.innerWidth,
4442
+ }));
4443
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4444
+
4445
+ const tooSmall = await page.evaluate((minPx: number): number => {
4446
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
4447
+ let undersize: number = 0;
4448
+ tappable.forEach((el: HTMLElement): void => {
4449
+ const rect = el.getBoundingClientRect();
4450
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
4451
+ undersize++;
4452
+ }
4453
+ });
4454
+ return undersize;
4455
+ }, 44);
4456
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
4457
+
4458
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-range-field-new/mobile-l-light.png', fullPage: true });
4459
+
4460
+ });
4461
+
4462
+ test('date-range-field-new × tablet-p × dark', async ({ page }): Promise<void> => {
4463
+ await page.setViewportSize({ width: 768, height: 1024 });
4464
+ const response = await page.goto('/c/date-range-field-new');
4465
+ expect(response?.ok()).toBeTruthy();
4466
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
4467
+ await page.waitForLoadState('networkidle');
4468
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4469
+ scrollWidth: document.documentElement.scrollWidth,
4470
+ innerWidth: window.innerWidth,
4471
+ }));
4472
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4473
+
4474
+ const tooSmall = await page.evaluate((minPx: number): number => {
4475
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
4476
+ let undersize: number = 0;
4477
+ tappable.forEach((el: HTMLElement): void => {
4478
+ const rect = el.getBoundingClientRect();
4479
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
4480
+ undersize++;
4481
+ }
4482
+ });
4483
+ return undersize;
4484
+ }, 44);
4485
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
4486
+
4487
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-range-field-new/tablet-p-dark.png', fullPage: true });
4488
+
4489
+ });
4490
+
4491
+ test('date-range-field-new × tablet-p × light', async ({ page }): Promise<void> => {
4492
+ await page.setViewportSize({ width: 768, height: 1024 });
4493
+ const response = await page.goto('/c/date-range-field-new');
4494
+ expect(response?.ok()).toBeTruthy();
4495
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
4496
+ await page.waitForLoadState('networkidle');
4497
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4498
+ scrollWidth: document.documentElement.scrollWidth,
4499
+ innerWidth: window.innerWidth,
4500
+ }));
4501
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4502
+
4503
+ const tooSmall = await page.evaluate((minPx: number): number => {
4504
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
4505
+ let undersize: number = 0;
4506
+ tappable.forEach((el: HTMLElement): void => {
4507
+ const rect = el.getBoundingClientRect();
4508
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
4509
+ undersize++;
4510
+ }
4511
+ });
4512
+ return undersize;
4513
+ }, 44);
4514
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
4515
+
4516
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-range-field-new/tablet-p-light.png', fullPage: true });
4517
+
4518
+ });
4519
+
4520
+ test('date-range-field-new × tablet-l × dark', async ({ page }): Promise<void> => {
4521
+ await page.setViewportSize({ width: 1024, height: 768 });
4522
+ const response = await page.goto('/c/date-range-field-new');
4523
+ expect(response?.ok()).toBeTruthy();
4524
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
4525
+ await page.waitForLoadState('networkidle');
4526
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4527
+ scrollWidth: document.documentElement.scrollWidth,
4528
+ innerWidth: window.innerWidth,
4529
+ }));
4530
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4531
+
4532
+ const tooSmall = await page.evaluate((minPx: number): number => {
4533
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
4534
+ let undersize: number = 0;
4535
+ tappable.forEach((el: HTMLElement): void => {
4536
+ const rect = el.getBoundingClientRect();
4537
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
4538
+ undersize++;
4539
+ }
4540
+ });
4541
+ return undersize;
4542
+ }, 44);
4543
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
4544
+
4545
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-range-field-new/tablet-l-dark.png', fullPage: true });
4546
+
4547
+ });
4548
+
4549
+ test('date-range-field-new × tablet-l × light', async ({ page }): Promise<void> => {
4550
+ await page.setViewportSize({ width: 1024, height: 768 });
4551
+ const response = await page.goto('/c/date-range-field-new');
4552
+ expect(response?.ok()).toBeTruthy();
4553
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
4554
+ await page.waitForLoadState('networkidle');
4555
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4556
+ scrollWidth: document.documentElement.scrollWidth,
4557
+ innerWidth: window.innerWidth,
4558
+ }));
4559
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4560
+
4561
+ const tooSmall = await page.evaluate((minPx: number): number => {
4562
+ const tappable: NodeListOf<HTMLElement> = document.querySelectorAll('button, a, [role="button"], input[type="checkbox"], input[type="radio"]');
4563
+ let undersize: number = 0;
4564
+ tappable.forEach((el: HTMLElement): void => {
4565
+ const rect = el.getBoundingClientRect();
4566
+ if (rect.width > 0 && rect.height > 0 && (rect.width < minPx || rect.height < minPx)) {
4567
+ undersize++;
4568
+ }
4569
+ });
4570
+ return undersize;
4571
+ }, 44);
4572
+ expect(tooSmall, 'tappable elements smaller than 44px').toBe(0);
4573
+
4574
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-range-field-new/tablet-l-light.png', fullPage: true });
4575
+
4576
+ });
4577
+
4578
+ test('date-range-field-new × desktop × dark', async ({ page }): Promise<void> => {
4579
+ await page.setViewportSize({ width: 1440, height: 900 });
4580
+ const response = await page.goto('/c/date-range-field-new');
4581
+ expect(response?.ok()).toBeTruthy();
4582
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
4583
+ await page.waitForLoadState('networkidle');
4584
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4585
+ scrollWidth: document.documentElement.scrollWidth,
4586
+ innerWidth: window.innerWidth,
4587
+ }));
4588
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4589
+
4590
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-range-field-new/desktop-dark.png', fullPage: true });
4591
+
4592
+ });
4593
+
4594
+ test('date-range-field-new × desktop × light', async ({ page }): Promise<void> => {
4595
+ await page.setViewportSize({ width: 1440, height: 900 });
4596
+ const response = await page.goto('/c/date-range-field-new');
4597
+ expect(response?.ok()).toBeTruthy();
4598
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
4599
+ await page.waitForLoadState('networkidle');
4600
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4601
+ scrollWidth: document.documentElement.scrollWidth,
4602
+ innerWidth: window.innerWidth,
4603
+ }));
4604
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4605
+
4606
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-range-field-new/desktop-light.png', fullPage: true });
4607
+
4608
+ });
4609
+
4610
+ test('date-range-field-new × desktop-wide × dark', async ({ page }): Promise<void> => {
4611
+ await page.setViewportSize({ width: 1920, height: 1080 });
4612
+ const response = await page.goto('/c/date-range-field-new');
4613
+ expect(response?.ok()).toBeTruthy();
4614
+ await page.evaluate((): void => { document.documentElement.classList.add('dark'); });
4615
+ await page.waitForLoadState('networkidle');
4616
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4617
+ scrollWidth: document.documentElement.scrollWidth,
4618
+ innerWidth: window.innerWidth,
4619
+ }));
4620
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4621
+
4622
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-range-field-new/desktop-wide-dark.png', fullPage: true });
4623
+
4624
+ });
4625
+
4626
+ test('date-range-field-new × desktop-wide × light', async ({ page }): Promise<void> => {
4627
+ await page.setViewportSize({ width: 1920, height: 1080 });
4628
+ const response = await page.goto('/c/date-range-field-new');
4629
+ expect(response?.ok()).toBeTruthy();
4630
+ await page.evaluate((): void => { document.documentElement.classList.remove('dark'); });
4631
+ await page.waitForLoadState('networkidle');
4632
+ const overflow = await page.evaluate((): { scrollWidth: number; innerWidth: number } => ({
4633
+ scrollWidth: document.documentElement.scrollWidth,
4634
+ innerWidth: window.innerWidth,
4635
+ }));
4636
+ expect(overflow.scrollWidth, 'horizontal overflow detected').toBeLessThanOrEqual(overflow.innerWidth);
4637
+
4638
+ await page.screenshot({ path: 'e2e/screenshots/sandbox/date-range-field-new/desktop-wide-light.png', fullPage: true });
4639
+
4640
+ });
4641
+ });
4642
+
4643
+ });