lighthouse 8.6.0-dev.20211021 → 8.6.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 (115) hide show
  1. package/dist/report/flow.js +13 -30
  2. package/dist/report/standalone.js +17 -17
  3. package/flow-report/assets/styles.css +30 -51
  4. package/flow-report/src/common.tsx +1 -1
  5. package/flow-report/src/header.tsx +2 -2
  6. package/flow-report/src/help-dialog.tsx +3 -3
  7. package/flow-report/src/i18n/i18n.tsx +13 -50
  8. package/flow-report/src/i18n/ui-strings.js +0 -48
  9. package/flow-report/src/icons.tsx +0 -7
  10. package/flow-report/src/sidebar/sidebar.tsx +6 -8
  11. package/flow-report/src/summary/category.tsx +18 -17
  12. package/flow-report/src/summary/summary.tsx +10 -10
  13. package/flow-report/src/topbar.tsx +5 -9
  14. package/flow-report/src/util.ts +5 -0
  15. package/flow-report/src/wrappers/category-score.tsx +3 -0
  16. package/flow-report/test/common-test.tsx +1 -1
  17. package/flow-report/test/summary/category-test.tsx +5 -9
  18. package/flow-report/test/summary/summary-test.tsx +1 -1
  19. package/flow-report/test/topbar-test.tsx +0 -1
  20. package/flow-report/tsconfig.json +0 -1
  21. package/jest.config.js +0 -1
  22. package/lighthouse-cli/test/smokehouse/lighthouse-runners/cli.js +1 -1
  23. package/lighthouse-core/audits/accessibility/axe-audit.js +1 -7
  24. package/lighthouse-core/audits/redirects-http.js +59 -0
  25. package/lighthouse-core/config/config-helpers.js +0 -1
  26. package/lighthouse-core/config/default-config.js +11 -0
  27. package/lighthouse-core/fraggle-rock/config/config.js +1 -1
  28. package/lighthouse-core/gather/gatherers/accessibility.js +0 -27
  29. package/lighthouse-core/gather/gatherers/http-redirect.js +46 -0
  30. package/lighthouse-core/lib/asset-saver.js +3 -3
  31. package/lighthouse-core/lib/i18n/i18n.js +8 -19
  32. package/lighthouse-core/lib/i18n/locales/en-US.ctc.json +6699 -0
  33. package/lighthouse-core/lib/i18n/locales/en-XL.ctc.json +6672 -0
  34. package/lighthouse-core/util-commonjs.js +37 -25
  35. package/package.json +4 -8
  36. package/readme.md +3 -3
  37. package/report/assets/styles.css +28 -157
  38. package/report/assets/templates.html +47 -2
  39. package/report/clients/psi.js +158 -0
  40. package/report/renderer/category-renderer.js +1 -30
  41. package/report/renderer/components.js +34 -16
  42. package/report/renderer/performance-category-renderer.js +10 -5
  43. package/report/renderer/report-renderer.js +33 -56
  44. package/report/renderer/util.js +37 -25
  45. package/report/test/clients/psi-test.js +143 -0
  46. package/report/test/renderer/category-renderer-test.js +1 -5
  47. package/report/test/renderer/i18n-test.js +7 -0
  48. package/report/test/renderer/performance-category-renderer-test.js +1 -1
  49. package/report/test/renderer/pwa-category-renderer-test.js +2 -2
  50. package/report/test/renderer/report-renderer-axe-test.js +10 -5
  51. package/report/test/renderer/report-renderer-test.js +11 -9
  52. package/report/test-assets/faux-psi-template.html +4 -1
  53. package/report/test-assets/faux-psi.js +16 -39
  54. package/shared/localization/format.js +17 -50
  55. package/shared/localization/locales/ar-XB.json +24 -0
  56. package/shared/localization/locales/ar.json +24 -0
  57. package/shared/localization/locales/bg.json +24 -0
  58. package/shared/localization/locales/ca.json +24 -0
  59. package/shared/localization/locales/cs.json +24 -0
  60. package/shared/localization/locales/da.json +24 -0
  61. package/shared/localization/locales/de.json +24 -0
  62. package/shared/localization/locales/el.json +24 -0
  63. package/shared/localization/locales/en-GB.json +24 -0
  64. package/shared/localization/locales/en-US.ctc.json +6877 -0
  65. package/shared/localization/locales/en-US.json +23 -26
  66. package/shared/localization/locales/en-XA.json +24 -0
  67. package/shared/localization/locales/en-XL.ctc.json +6852 -0
  68. package/shared/localization/locales/en-XL.json +23 -26
  69. package/shared/localization/locales/es-419.json +24 -0
  70. package/shared/localization/locales/es.json +24 -0
  71. package/shared/localization/locales/fi.json +24 -0
  72. package/shared/localization/locales/fil.json +24 -0
  73. package/shared/localization/locales/fr.json +24 -0
  74. package/shared/localization/locales/he.json +24 -0
  75. package/shared/localization/locales/hi.json +24 -0
  76. package/shared/localization/locales/hr.json +24 -0
  77. package/shared/localization/locales/hu.json +24 -0
  78. package/shared/localization/locales/id.json +24 -0
  79. package/shared/localization/locales/it.json +24 -0
  80. package/shared/localization/locales/ja.json +24 -0
  81. package/shared/localization/locales/ko.json +24 -0
  82. package/shared/localization/locales/lt.json +24 -0
  83. package/shared/localization/locales/lv.json +24 -0
  84. package/shared/localization/locales/nl.json +24 -0
  85. package/shared/localization/locales/no.json +24 -0
  86. package/shared/localization/locales/pl.json +24 -0
  87. package/shared/localization/locales/pt-PT.json +24 -0
  88. package/shared/localization/locales/pt.json +24 -0
  89. package/shared/localization/locales/ro.json +24 -0
  90. package/shared/localization/locales/ru.json +24 -0
  91. package/shared/localization/locales/sk.json +24 -0
  92. package/shared/localization/locales/sl.json +24 -0
  93. package/shared/localization/locales/sr-Latn.json +24 -0
  94. package/shared/localization/locales/sr.json +24 -0
  95. package/shared/localization/locales/sv.json +24 -0
  96. package/shared/localization/locales/ta.json +24 -0
  97. package/shared/localization/locales/te.json +24 -0
  98. package/shared/localization/locales/th.json +24 -0
  99. package/shared/localization/locales/tr.json +24 -0
  100. package/shared/localization/locales/uk.json +24 -0
  101. package/shared/localization/locales/vi.json +24 -0
  102. package/shared/localization/locales/zh-HK.json +24 -0
  103. package/shared/localization/locales/zh-TW.json +24 -0
  104. package/shared/localization/locales/zh.json +24 -0
  105. package/shared/localization/locales.js +0 -6
  106. package/shared/test/localization/format-test.js +9 -45
  107. package/shared/test/localization/swap-locale-test.js +12 -0
  108. package/third-party/download-content-shell/download-content-shell.js +2 -2
  109. package/third-party/download-content-shell/utils.js +24 -0
  110. package/tsconfig.json +1 -0
  111. package/types/artifacts.d.ts +3 -1
  112. package/types/enquirer.d.ts +1 -3
  113. package/types/node.d.ts +5 -5
  114. package/flow-report/test/wrappers/category-score-test.tsx +0 -87
  115. package/report/test/clients/bundle-test.js +0 -62
@@ -170,8 +170,6 @@ class Util {
170
170
 
171
171
  /**
172
172
  * Convert a score to a rating label.
173
- * TODO: Return `'error'` for `score === null && !scoreDisplayMode`.
174
- *
175
173
  * @param {number|null} score
176
174
  * @param {string=} scoreDisplayMode
177
175
  * @return {string}
@@ -392,21 +390,43 @@ class Util {
392
390
  return hostname.split('.').slice(-splitTld.length).join('.');
393
391
  }
394
392
 
393
+ /**
394
+ * @param {LH.Result['configSettings']} settings
395
+ * @return {!Array<{name: string, description: string}>}
396
+ */
397
+ static getEnvironmentDisplayValues(settings) {
398
+ const emulationDesc = Util.getEmulationDescriptions(settings);
399
+
400
+ return [
401
+ {
402
+ name: Util.i18n.strings.runtimeSettingsDevice,
403
+ description: emulationDesc.deviceEmulation,
404
+ },
405
+ {
406
+ name: Util.i18n.strings.runtimeSettingsNetworkThrottling,
407
+ description: emulationDesc.networkThrottling,
408
+ },
409
+ {
410
+ name: Util.i18n.strings.runtimeSettingsCPUThrottling,
411
+ description: emulationDesc.cpuThrottling,
412
+ },
413
+ ];
414
+ }
395
415
 
396
416
  /**
397
417
  * @param {LH.Result['configSettings']} settings
398
- * @return {!{deviceEmulation: string, networkThrottling: string, cpuThrottling: string, summary: string}}
418
+ * @return {{deviceEmulation: string, networkThrottling: string, cpuThrottling: string}}
399
419
  */
400
420
  static getEmulationDescriptions(settings) {
401
421
  let cpuThrottling;
402
422
  let networkThrottling;
403
- let summary;
404
423
 
405
424
  const throttling = settings.throttling;
406
425
 
407
426
  switch (settings.throttlingMethod) {
408
427
  case 'provided':
409
- summary = networkThrottling = cpuThrottling = Util.i18n.strings.throttlingProvided;
428
+ cpuThrottling = Util.i18n.strings.throttlingProvided;
429
+ networkThrottling = Util.i18n.strings.throttlingProvided;
410
430
  break;
411
431
  case 'devtools': {
412
432
  const {cpuSlowdownMultiplier, requestLatencyMs} = throttling;
@@ -414,13 +434,6 @@ class Util {
414
434
  networkThrottling = `${Util.i18n.formatNumber(requestLatencyMs)}${NBSP}ms HTTP RTT, ` +
415
435
  `${Util.i18n.formatNumber(throttling.downloadThroughputKbps)}${NBSP}Kbps down, ` +
416
436
  `${Util.i18n.formatNumber(throttling.uploadThroughputKbps)}${NBSP}Kbps up (DevTools)`;
417
-
418
- const isSlow4G = () => {
419
- return requestLatencyMs === 150 * 3.75 &&
420
- throttling.downloadThroughputKbps === 1.6 * 1024 * 0.9 &&
421
- throttling.uploadThroughputKbps === 750 * 0.9;
422
- };
423
- summary = `${isSlow4G() ? 'Slow 4G' : 'Custom'} throttling by DevTools`;
424
437
  break;
425
438
  }
426
439
  case 'simulate': {
@@ -428,15 +441,11 @@ class Util {
428
441
  cpuThrottling = `${Util.i18n.formatNumber(cpuSlowdownMultiplier)}x slowdown (Simulated)`;
429
442
  networkThrottling = `${Util.i18n.formatNumber(rttMs)}${NBSP}ms TCP RTT, ` +
430
443
  `${Util.i18n.formatNumber(throughputKbps)}${NBSP}Kbps throughput (Simulated)`;
431
-
432
- const isSlow4G = () => {
433
- return rttMs === 150 && throughputKbps === 1.6 * 1024;
434
- };
435
- summary = isSlow4G() ? 'Simulated slow 4G' : 'Custom simulated throttling';
436
444
  break;
437
445
  }
438
446
  default:
439
- summary = cpuThrottling = networkThrottling = Util.i18n.strings.runtimeUnknown;
447
+ cpuThrottling = Util.i18n.strings.runtimeUnknown;
448
+ networkThrottling = Util.i18n.strings.runtimeUnknown;
440
449
  }
441
450
 
442
451
  // TODO(paulirish): revise Runtime Settings strings: https://github.com/GoogleChrome/lighthouse/pull/11796
@@ -449,7 +458,6 @@ class Util {
449
458
  deviceEmulation,
450
459
  cpuThrottling,
451
460
  networkThrottling,
452
- summary,
453
461
  };
454
462
  }
455
463
 
@@ -632,12 +640,22 @@ Util.UIStrings = {
632
640
  /** Option in a dropdown menu that toggles the themeing of the report between Light(default) and Dark themes. */
633
641
  dropdownDarkTheme: 'Toggle Dark Theme',
634
642
 
643
+ /** Title of the Runtime settings table in a Lighthouse report. Runtime settings are the environment configurations that a specific report used at auditing time. */
644
+ runtimeSettingsTitle: 'Runtime Settings',
645
+ /** Label for a row in a table that shows the URL that was audited during a Lighthouse run. */
646
+ runtimeSettingsUrl: 'URL',
647
+ /** Label for a row in a table that shows the time at which a Lighthouse run was conducted; formatted as a timestamp, e.g. Jan 1, 1970 12:00 AM UTC. */
648
+ runtimeSettingsFetchTime: 'Fetch Time',
635
649
  /** Label for a row in a table that describes the kind of device that was emulated for the Lighthouse run. Example values for row elements: 'No Emulation', 'Emulated Desktop', etc. */
636
650
  runtimeSettingsDevice: 'Device',
637
651
  /** Label for a row in a table that describes the network throttling conditions that were used during a Lighthouse run, if any. */
638
652
  runtimeSettingsNetworkThrottling: 'Network throttling',
639
653
  /** Label for a row in a table that describes the CPU throttling conditions that were used during a Lighthouse run, if any.*/
640
654
  runtimeSettingsCPUThrottling: 'CPU throttling',
655
+ /** Label for a row in a table that shows in what tool Lighthouse is being run (e.g. The lighthouse CLI, Chrome DevTools, Lightrider, WebPageTest, etc). */
656
+ runtimeSettingsChannel: 'Channel',
657
+ /** Label for a row in a table that shows the User Agent that was detected on the Host machine that ran Lighthouse. */
658
+ runtimeSettingsUA: 'User agent (host)',
641
659
  /** Label for a row in a table that shows the User Agent that was used to send out all network requests during the Lighthouse run. */
642
660
  runtimeSettingsUANetwork: 'User agent (network)',
643
661
  /** Label for a row in a table that shows the estimated CPU power of the machine running Lighthouse. Example row values: 532, 1492, 783. */
@@ -656,12 +674,6 @@ Util.UIStrings = {
656
674
  runtimeDesktopEmulation: 'Emulated Desktop',
657
675
  /** Descriptive explanation for a runtime setting that is set to an unknown value. */
658
676
  runtimeUnknown: 'Unknown',
659
- /** Descriptive label that this analysis run was from a single pageload of a browser (not a summary of hundreds of loads) */
660
- runtimeSingleLoad: 'Single page load',
661
- /** Descriptive label that this analysis only considers the initial load of the page, and no interaction beyond when the page had "fully loaded" */
662
- runtimeAnalysisWindow: 'Initial page load',
663
- /** Descriptive explanation that this analysis run was from a single pageload of a browser, whereas field data often summarizes hundreds+ of page loads */
664
- runtimeSingleLoadTooltip: 'This data is taken from a single page load, as opposed to field data summarizing many sessions.', // eslint-disable-line max-len
665
677
 
666
678
  /** Descriptive explanation for environment throttling that was provided by the runtime environment instead of provided by Lighthouse throttling. */
667
679
  throttlingProvided: 'Provided by environment',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lighthouse",
3
- "version": "8.6.0-dev.20211021",
3
+ "version": "8.6.0",
4
4
  "description": "Automated auditing, performance metrics, and best practices for the web.",
5
5
  "main": "./lighthouse-core/index.js",
6
6
  "bin": {
@@ -9,7 +9,7 @@
9
9
  "smokehouse": "./lighthouse-cli/test/smokehouse/frontends/smokehouse-bin.js"
10
10
  },
11
11
  "engines": {
12
- "node": ">=14.15"
12
+ "node": ">=12.20.0 12 || >=14.13 14 || >=15"
13
13
  },
14
14
  "scripts": {
15
15
  "build-all": "npm-run-posix-or-windows build-all:task",
@@ -23,7 +23,7 @@
23
23
  "build-smokehouse-bundle": "node ./build/build-smokehouse-bundle.js",
24
24
  "build-lr": "yarn reset-link && node ./build/build-lightrider-bundles.js",
25
25
  "build-pack": "bash build/build-pack.sh",
26
- "build-report": "node build/build-report-components.js && yarn eslint --fix report/renderer/components.js && node build/build-report.js && bash lighthouse-core/scripts/copy-util-commonjs.sh",
26
+ "build-report": "node build/build-report-components.js && yarn eslint --fix report/renderer/components.js && node build/build-report.js",
27
27
  "build-sample-reports": "yarn build-report && node build/build-sample-reports.js",
28
28
  "build-treemap": "node ./build/build-treemap.js",
29
29
  "build-viewer": "node ./build/build-viewer.js",
@@ -51,7 +51,7 @@
51
51
  "unit-viewer": "yarn jest \"lighthouse-viewer/.*-test.js\"",
52
52
  "unit-flow": "yarn jest \"flow-report/.*-test.[tj]s[x]?\"",
53
53
  "unit": "yarn jest",
54
- "unit:ci": "NODE_OPTIONS=--max-old-space-size=8192 npm run jest --ci .",
54
+ "unit:ci": "NODE_OPTIONS=--max-old-space-size=8192 npm run jest -- --ci",
55
55
  "core-unit": "yarn unit-core",
56
56
  "cli-unit": "yarn unit-cli",
57
57
  "viewer-unit": "yarn unit-viewer",
@@ -105,7 +105,6 @@
105
105
  "@types/configstore": "^4.0.0",
106
106
  "@types/cpy": "^5.1.0",
107
107
  "@types/eslint": "^4.16.6",
108
- "@types/estree": "^0.0.50",
109
108
  "@types/exorcist": "^0.4.5",
110
109
  "@types/gh-pages": "^2.0.0",
111
110
  "@types/google.analytics": "0.0.39",
@@ -129,7 +128,6 @@
129
128
  "@typescript-eslint/eslint-plugin": "^4.30.0",
130
129
  "@typescript-eslint/parser": "^4.30.0",
131
130
  "@wardpeet/brfs": "2.1.0",
132
- "acorn": "^8.5.0",
133
131
  "angular": "^1.7.4",
134
132
  "archiver": "^3.0.0",
135
133
  "browserify": "^17.0.0",
@@ -159,7 +157,6 @@
159
157
  "jsonld": "^5.2.0",
160
158
  "jsonlint-mod": "^1.7.6",
161
159
  "lighthouse-plugin-publisher-ads": "^1.4.1",
162
- "magic-string": "^0.25.7",
163
160
  "mime-types": "^2.1.30",
164
161
  "node-fetch": "^2.6.1",
165
162
  "npm-run-posix-or-windows": "^2.0.2",
@@ -168,7 +165,6 @@
168
165
  "preact": "^10.5.14",
169
166
  "pretty-json-stringify": "^0.0.2",
170
167
  "puppeteer": "^10.2.0",
171
- "resolve": "^1.20.0",
172
168
  "rollup": "^2.50.6",
173
169
  "rollup-plugin-node-resolve": "^5.2.0",
174
170
  "rollup-plugin-polyfill-node": "^0.7.0",
package/readme.md CHANGED
@@ -52,7 +52,7 @@ The Chrome extension was available prior to Lighthouse being available in Chrome
52
52
 
53
53
  The Node CLI provides the most flexibility in how Lighthouse runs can be configured and reported. Users who want more advanced usage, or want to run Lighthouse in an automated fashion should use the Node CLI.
54
54
 
55
- _Lighthouse requires Node 14 LTS (14.x) or later._
55
+ _Lighthouse requires Node 12 LTS (12.20) or later._
56
56
 
57
57
  **Installation**:
58
58
 
@@ -451,9 +451,9 @@ machine. Report results are never processed or beaconed to a remote server.
451
451
 
452
452
  ### How do I get localized Lighthouse results via the CLI?
453
453
 
454
- Starting in Lighthouse 8.0, Lighthouse relies entirely on native `Intl` support and no longer uses an `Intl` polyfill. If you're using Node 14 or later, there should be no issue because Node is now [built with `full-icu` by default](https://nodejs.medium.com/node-js-12-to-lts-and-node-js-13-is-here-e28d6a4a2bd#9514).
454
+ Starting in Lighthouse 8.0, Lighthouse relies entirely on native `Intl` support and no longer uses an `Intl` polyfill. If you're using Node 13 or later, there should be no issue because Node is now [built with `full-icu` by default](https://nodejs.medium.com/node-js-12-to-lts-and-node-js-13-is-here-e28d6a4a2bd#9514).
455
455
 
456
- However, if you're using a `small-icu` Node build, you may see Lighthouse log messages about your locale not being available. To remedy this, you can upgrade to Node 14+ or manually install ICU data by using the [`full-icu`](https://www.npmjs.com/package/full-icu) module and the [`--icu-data-dir` node flag](https://nodejs.org/api/intl.html#intl_providing_icu_data_at_runtime) at launch.
456
+ However, if you're using Node 12 (when `small-icu` was the default) or another `small-icu` Node build, you may see Lighthouse log messages about your locale not being available. To remedy this, you can upgrade to Node 14+ or manually install ICU data by using the [`full-icu`](https://www.npmjs.com/package/full-icu) module and the [`--icu-data-dir` node flag](https://nodejs.org/api/intl.html#intl_providing_icu_data_at_runtime) at launch.
457
457
 
458
458
  ### How do I author custom audits to extend Lighthouse?
459
459
 
@@ -79,6 +79,7 @@
79
79
  --audit-group-padding-vertical: 8px;
80
80
  --audit-margin-horizontal: 5px;
81
81
  --audit-padding-vertical: 8px;
82
+ --category-header-font-size: 20px;
82
83
  --category-padding: 40px;
83
84
  --chevron-line-stroke: var(--color-gray-600);
84
85
  --chevron-size: 12px;
@@ -192,7 +193,7 @@
192
193
  --color-informative: var(--color-blue-200);
193
194
 
194
195
  /* Component variables */
195
- --env-item-background-color: #393535;
196
+ --env-item-background-color: var(--color-gray);
196
197
  --locale-selector-background-color: var(--color-gray-200);
197
198
  --plugin-badge-background-color: var(--color-gray-800);
198
199
  --report-background-color: var(--color-gray-900);
@@ -249,6 +250,7 @@
249
250
  --audit-group-margin-bottom: 20px;
250
251
  --audit-group-padding-vertical: 12px;
251
252
  --audit-padding-vertical: 4px;
253
+ --category-header-font-size: 16px;
252
254
  --category-padding: 12px;
253
255
  --default-padding: 12px;
254
256
  --env-name-min-width: 120px;
@@ -417,8 +419,6 @@
417
419
  width: var(--report-icon-size);
418
420
  height: var(--report-icon-size);
419
421
  opacity: 0.7;
420
- display: inline-block;
421
- vertical-align: middle;
422
422
  }
423
423
  .lh-report-icon:hover::before {
424
424
  opacity: 1;
@@ -442,35 +442,9 @@
442
442
  background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 100 125"><path d="M50 23.587c-16.27 0-22.799 12.574-22.799 21.417 0 12.917 10.117 22.451 12.436 32.471h20.726c2.32-10.02 12.436-19.554 12.436-32.471 0-8.843-6.528-21.417-22.799-21.417zM39.637 87.161c0 3.001 1.18 4.181 4.181 4.181h.426l.41 1.231C45.278 94.449 46.042 95 48.019 95h3.963c1.978 0 2.74-.551 3.365-2.427l.409-1.231h.427c3.002 0 4.18-1.18 4.18-4.181V80.91H39.637v6.251zM50 18.265c1.26 0 2.072-.814 2.072-2.073v-9.12C52.072 5.813 51.26 5 50 5c-1.259 0-2.072.813-2.072 2.073v9.12c0 1.259.813 2.072 2.072 2.072zM68.313 23.727c.994.774 2.135.634 2.91-.357l5.614-7.187c.776-.992.636-2.135-.356-2.909-.992-.776-2.135-.636-2.91.357l-5.613 7.186c-.778.993-.636 2.135.355 2.91zM91.157 36.373c-.306-1.222-1.291-1.815-2.513-1.51l-8.85 2.207c-1.222.305-1.814 1.29-1.51 2.512.305 1.223 1.291 1.814 2.513 1.51l8.849-2.206c1.223-.305 1.816-1.291 1.511-2.513zM86.757 60.48l-8.331-3.709c-1.15-.512-2.225-.099-2.736 1.052-.512 1.151-.1 2.224 1.051 2.737l8.33 3.707c1.15.514 2.225.101 2.736-1.05.513-1.149.1-2.223-1.05-2.737zM28.779 23.37c.775.992 1.917 1.131 2.909.357.992-.776 1.132-1.917.357-2.91l-5.615-7.186c-.775-.992-1.917-1.132-2.909-.357s-1.131 1.917-.356 2.909l5.614 7.187zM21.715 39.583c.305-1.223-.288-2.208-1.51-2.513l-8.849-2.207c-1.222-.303-2.208.289-2.513 1.511-.303 1.222.288 2.207 1.511 2.512l8.848 2.206c1.222.304 2.208-.287 2.513-1.509zM21.575 56.771l-8.331 3.711c-1.151.511-1.563 1.586-1.05 2.735.511 1.151 1.586 1.563 2.736 1.052l8.331-3.711c1.151-.511 1.563-1.586 1.05-2.735-.512-1.15-1.585-1.562-2.736-1.052z"/></svg>');
443
443
  }
444
444
  .lh-report-icon--treemap::before {
445
- background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="black"><path d="M3 5v14h19V5H3zm2 2h15v4H5V7zm0 10v-4h4v4H5zm6 0v-4h9v4h-9z"/></svg>');
446
- }
447
- .lh-report-icon--date::before {
448
- background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7 11h2v2H7v-2zm14-5v14a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h1V2h2v2h8V2h2v2h1a2 2 0 012 2zM5 8h14V6H5v2zm14 12V10H5v10h14zm-4-7h2v-2h-2v2zm-4 0h2v-2h-2v2z"/></svg>');
449
- }
450
- .lh-report-icon--devices::before {
451
- background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 6h18V4H4a2 2 0 00-2 2v11H0v3h14v-3H4V6zm19 2h-6a1 1 0 00-1 1v10c0 .6.5 1 1 1h6c.6 0 1-.5 1-1V9c0-.6-.5-1-1-1zm-1 9h-4v-7h4v7z"/></svg>');
452
- }
453
- .lh-report-icon--world::before {
454
- background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm7 6h-3c-.3-1.3-.8-2.5-1.4-3.6A8 8 0 0 1 18.9 8zm-7-4a14 14 0 0 1 2 4h-4a14 14 0 0 1 2-4zM4.3 14a8.2 8.2 0 0 1 0-4h3.3a16.5 16.5 0 0 0 0 4H4.3zm.8 2h3a14 14 0 0 0 1.3 3.6A8 8 0 0 1 5.1 16zm3-8H5a8 8 0 0 1 4.3-3.6L8 8zM12 20a14 14 0 0 1-2-4h4a14 14 0 0 1-2 4zm2.3-6H9.7a14.7 14.7 0 0 1 0-4h4.6a14.6 14.6 0 0 1 0 4zm.3 5.6c.6-1.2 1-2.4 1.4-3.6h3a8 8 0 0 1-4.4 3.6zm1.8-5.6a16.5 16.5 0 0 0 0-4h3.3a8.2 8.2 0 0 1 0 4h-3.3z"/></svg>');
455
- }
456
- .lh-report-icon--stopwatch::before {
457
- background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15 1H9v2h6V1zm-4 13h2V8h-2v6zm8.1-6.6L20.5 6l-1.4-1.4L17.7 6A9 9 0 0 0 3 13a9 9 0 1 0 16-5.6zm-7 12.6a7 7 0 1 1 0-14 7 7 0 0 1 0 14z"/></svg>');
458
- }
459
- .lh-report-icon--networkspeed::before {
460
- background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15.9 5c-.2 0-.3 0-.4.2v.2L10.1 17a2 2 0 0 0-.2 1 2 2 0 0 0 4 .4l2.4-12.9c0-.3-.2-.5-.5-.5zM1 9l2 2c2.9-2.9 6.8-4 10.5-3.6l1.2-2.7C10 3.8 4.7 5.3 1 9zm20 2 2-2a15.4 15.4 0 0 0-5.6-3.6L17 8.2c1.5.7 2.9 1.6 4.1 2.8zm-4 4 2-2a9.9 9.9 0 0 0-2.7-1.9l-.5 3 1.2.9zM5 13l2 2a7.1 7.1 0 0 1 4-2l1.3-2.9C9.7 10.1 7 11 5 13z"/></svg>');
461
- }
462
- .lh-report-icon--samples-one::before {
463
- background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="7" cy="14" r="3"/><path d="M7 18a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm4-2a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm5.6 17.6a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/></svg>');
464
- }
465
- .lh-report-icon--samples-many::before {
466
- background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7 18a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm4-2a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm5.6 17.6a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/><circle cx="7" cy="14" r="3"/><circle cx="11" cy="6" r="3"/></svg>');
467
- }
468
- .lh-report-icon--chrome::before {
469
- background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="-50 -50 562 562"><path d="M256 25.6v25.6a204 204 0 0 1 144.8 60 204 204 0 0 1 60 144.8 204 204 0 0 1-60 144.8 204 204 0 0 1-144.8 60 204 204 0 0 1-144.8-60 204 204 0 0 1-60-144.8 204 204 0 0 1 60-144.8 204 204 0 0 1 144.8-60V0a256 256 0 1 0 0 512 256 256 0 0 0 0-512v25.6z"/><path d="M256 179.2v25.6a51.3 51.3 0 0 1 0 102.4 51.3 51.3 0 0 1 0-102.4v-51.2a102.3 102.3 0 1 0-.1 204.7 102.3 102.3 0 0 0 .1-204.7v25.6z"/><path d="M256 204.8h217.6a25.6 25.6 0 0 0 0-51.2H256a25.6 25.6 0 0 0 0 51.2m44.3 76.8L191.5 470.1a25.6 25.6 0 1 0 44.4 25.6l108.8-188.5a25.6 25.6 0 1 0-44.4-25.6m-88.6 0L102.9 93.2a25.7 25.7 0 0 0-35-9.4 25.7 25.7 0 0 0-9.4 35l108.8 188.5a25.7 25.7 0 0 0 35 9.4 25.9 25.9 0 0 0 9.4-35.1"/></svg>');
445
+ background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="black"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M3 5v14h19V5H3zm2 2h15v4H5V7zm0 10v-4h4v4H5zm6 0v-4h9v4h-9z"/></svg>');
470
446
  }
471
447
 
472
-
473
-
474
448
  .lh-buttons {
475
449
  display: flex;
476
450
  flex-wrap: wrap;
@@ -484,9 +458,6 @@
484
458
  color: rgb(26, 115, 232);
485
459
  background-color: var(--report-background-color);
486
460
  }
487
- .lh-button:first-of-type {
488
- margin-left: 0;
489
- }
490
461
  .lh-dark .lh-button {
491
462
  color: var(--color-blue-200);
492
463
  }
@@ -543,7 +514,7 @@
543
514
  }
544
515
  .lh-audit--manual .lh-audit__score-icon,
545
516
  .lh-audit--notapplicable .lh-audit__score-icon {
546
- border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-400);
517
+ border: 2px solid var(--color-gray-400);
547
518
  border-radius: 100%;
548
519
  background: none;
549
520
  }
@@ -553,7 +524,7 @@
553
524
  }
554
525
 
555
526
  .lh-audit--informative .lh-audit__score-icon {
556
- border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-400);
527
+ border: 2px solid var(--color-gray-400);
557
528
  border-radius: 100%;
558
529
  }
559
530
 
@@ -690,9 +661,8 @@
690
661
  .lh-metrics-container {
691
662
  display: grid;
692
663
  grid-template-rows: 1fr 1fr 1fr;
693
- grid-template-columns: 1fr 1fr;
694
664
  grid-auto-flow: column;
695
- grid-column-gap: var(--report-line-height);
665
+ grid-column-gap: 24px;
696
666
  }
697
667
 
698
668
  .lh-metric {
@@ -1004,9 +974,6 @@
1004
974
  margin-bottom: var(--audit-group-margin-bottom);
1005
975
  position: relative;
1006
976
  }
1007
- .lh-audit-group--metrics {
1008
- margin-bottom: calc(var(--audit-group-margin-bottom) / 2);
1009
- }
1010
977
 
1011
978
  .lh-audit-group__header::before {
1012
979
  /* By default, groups don't get an icon */
@@ -1108,13 +1075,6 @@
1108
1075
  margin-top: var(--audit-group-padding-vertical);
1109
1076
  }
1110
1077
 
1111
- /* Our report design omits the header 'Metrics', as they're clearly the metrics.
1112
- It's more straightforward to hide w/ CSS vs change categoryRenderer.renderAuditGroup for this case. */
1113
- .lh-audit-group--metrics > .lh-audit-group__header {
1114
- /* Also, it's vis hidden (and not display:none) because of spacing regarding the pill. */
1115
- visibility: hidden;
1116
- }
1117
-
1118
1078
  .lh-audit-explanation {
1119
1079
  margin: var(--audit-padding-vertical) 0 calc(var(--audit-padding-vertical) / 2) var(--audit-margin-horizontal);
1120
1080
  line-height: var(--audit-explanation-line-height);
@@ -1268,7 +1228,7 @@
1268
1228
  }
1269
1229
  .lh-fraction__wrapper--null .lh-fraction__content::before {
1270
1230
  border-radius: 50%;
1271
- border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-700);
1231
+ border: 2px solid var(--color-gray-700);
1272
1232
  }
1273
1233
 
1274
1234
  .lh-fraction__background {
@@ -1291,13 +1251,10 @@
1291
1251
  position: relative;
1292
1252
  align-items: center;
1293
1253
  justify-content: center;
1294
- font-size: calc(0.3 * var(--gauge-circle-size));
1295
- line-height: calc(0.4 * var(--gauge-circle-size));
1254
+ font-size: var(--gauge-label-font-size);
1296
1255
  width: max-content;
1297
- min-width: calc(1.5 * var(--gauge-circle-size));
1298
- padding: calc(0.1 * var(--gauge-circle-size)) calc(0.2 * var(--gauge-circle-size));
1299
- --score-icon-size: calc(0.21 * var(--gauge-circle-size));
1300
- --score-icon-margin: 0 calc(0.15 * var(--gauge-circle-size)) 0 0;
1256
+ padding: 1em;
1257
+ min-width: 6em;
1301
1258
  }
1302
1259
 
1303
1260
  .lh-gauge {
@@ -1325,9 +1282,12 @@
1325
1282
  position: relative;
1326
1283
  height: var(--gauge-circle-size);
1327
1284
  }
1328
- .lh-category .lh-gauge__svg-wrapper,
1285
+ .lh-category .lh-gauge__svg-wrapper {
1286
+ --gauge-circle-size: var(--gauge-circle-size-big);
1287
+ }
1329
1288
  .lh-category .lh-fraction__wrapper {
1330
1289
  --gauge-circle-size: var(--gauge-circle-size-big);
1290
+ --score-icon-size: var(--score-icon-size-big)
1331
1291
  }
1332
1292
 
1333
1293
  /* The plugin badge overlay */
@@ -1405,6 +1365,10 @@
1405
1365
  --gauge-label-line-height: var(--gauge-label-line-height-big);
1406
1366
  margin-top: 14px;
1407
1367
  }
1368
+ .lh-category .lh-fraction__content {
1369
+ --gauge-label-font-size: var(--gauge-label-font-size-big);
1370
+ }
1371
+
1408
1372
 
1409
1373
  .lh-scores-header .lh-gauge__wrapper,
1410
1374
  .lh-scores-header .lh-fraction__wrapper,
@@ -1461,6 +1425,8 @@
1461
1425
  }
1462
1426
 
1463
1427
  .lh-category-header {
1428
+ font-size: var(--category-header-font-size);
1429
+ min-height: var(--gauge-circle-size);
1464
1430
  margin-bottom: var(--section-padding-vertical);
1465
1431
  }
1466
1432
 
@@ -1470,51 +1436,11 @@
1470
1436
  margin: 0px auto;
1471
1437
  }
1472
1438
 
1473
- .lh-category-header__finalscreenshot {
1474
- display: grid;
1475
- grid-template: none / 1fr 1px 1fr;
1476
- justify-items: center;
1477
- align-items: center;
1478
- gap: var(--report-line-height);
1479
- }
1480
-
1481
- .lh-category-header__finalscreenshot .lh-scorescale {
1482
- border: 0;
1483
- padding: 0;
1484
- display: flex;
1485
- justify-content: center;
1486
- }
1487
-
1488
- .lh-category-header__finalscreenshot .lh-scorescale-range {
1489
- font-family: unset;
1490
- font-size: 12px;
1491
- }
1492
-
1493
- .lh-final-ss-image {
1494
- /* constrain the size of the image to not be too large */
1495
- max-height: calc(var(--gauge-circle-size-big) * 2.8);
1496
- max-width: calc(var(--gauge-circle-size-big) * 3.5);
1497
- border: 1px solid var(--color-gray-200);
1498
- padding: 4px;
1499
- border-radius: 3px;
1500
- }
1501
-
1502
- .lh-category-headercol--separator {
1503
- background: var(--color-gray-200);
1504
- width: 1px;
1505
- height: var(--gauge-circle-size-big);
1439
+ .lh-category-header .lh-audit__title {
1440
+ font-size: var(--category-header-font-size);
1441
+ line-height: var(--header-line-height);
1506
1442
  }
1507
1443
 
1508
- @media screen and (max-width: 535px) {
1509
- .lh-category-header__finalscreenshot {
1510
- grid-template: 1fr 1fr / none
1511
- }
1512
- .lh-category-headercol--separator {
1513
- display: none;
1514
- }
1515
- }
1516
-
1517
-
1518
1444
  /* 964 fits the min-width of the filmstrip */
1519
1445
  @media screen and (max-width: 964px) {
1520
1446
  .lh-report {
@@ -1718,13 +1644,11 @@
1718
1644
  display: none; /* Don't retain these layers when not needed */
1719
1645
  opacity: 0;
1720
1646
  background: #ffffff;
1721
- white-space: pre-line; /* Render newlines in the text */
1722
1647
  min-width: 246px;
1723
1648
  max-width: 275px;
1724
1649
  padding: 15px;
1725
1650
  border-radius: 5px;
1726
1651
  text-align: initial;
1727
- line-height: 1.4;
1728
1652
  }
1729
1653
  /* shrink tooltips to not be cutoff on left edge of narrow viewports
1730
1654
  45vw is chosen to be ~= width of the left column of metrics
@@ -1736,6 +1660,10 @@
1736
1660
  }
1737
1661
  }
1738
1662
 
1663
+ .lh-tooltip-boundary:hover {
1664
+ background-color: var(--color-hover);
1665
+ }
1666
+
1739
1667
  .lh-tooltip-boundary:hover .lh-tooltip {
1740
1668
  display: block;
1741
1669
  animation: fadeInTooltip 250ms;
@@ -1818,61 +1746,4 @@
1818
1746
  cursor: zoom-in;
1819
1747
  }
1820
1748
 
1821
-
1822
- .lh-meta__items {
1823
- display: grid;
1824
- grid-template-columns: 1fr 1fr 1fr;
1825
- background-color: var(--env-item-background-color);
1826
- border-radius: 3px;
1827
- padding: 0;
1828
- font-size: 13px;
1829
- padding-bottom: calc(var(--default-padding) / 2);
1830
- }
1831
-
1832
- .lh-meta__item {
1833
- display: block;
1834
- list-style-type: none;
1835
- position: relative;
1836
- padding: calc(var(--default-padding) / 2) 0 0 calc(var(--default-padding) * 3);
1837
- cursor: unset; /* disable pointer cursor from report-icon */
1838
- }
1839
-
1840
- .lh-meta__item.lh-tooltip-boundary {
1841
- text-decoration: dotted underline var(--color-gray-500);
1842
- cursor: help;
1843
- }
1844
-
1845
- .lh-meta__item.lh-report-icon::before {
1846
- position: absolute;
1847
- left: var(--default-padding);
1848
- width: calc(var(--report-icon-size) * 0.8);
1849
- height: calc(var(--report-icon-size) * 0.8);
1850
- }
1851
-
1852
- .lh-meta__item.lh-report-icon:hover::before {
1853
- opacity: 0.7;
1854
- }
1855
-
1856
- .lh-meta__item .lh-tooltip {
1857
- color: var(--color-gray-800);
1858
- }
1859
-
1860
- .lh-meta__item .lh-tooltip::before {
1861
- right: auto; /* Set the tooltip arrow to the leftside */
1862
- left: 6px;
1863
- }
1864
-
1865
- /* Change the grid for narrow viewport. */
1866
- @media screen and (max-width: 640px) {
1867
- .lh-meta__items {
1868
- grid-template-columns: 1fr 1fr;
1869
- }
1870
- }
1871
- @media screen and (max-width: 535px) {
1872
- .lh-meta__items {
1873
- display: block;
1874
- }
1875
- }
1876
-
1877
-
1878
1749
  /*# sourceURL=report-styles.css */
@@ -527,10 +527,47 @@ limitations under the License.
527
527
  .lh-footer .lh-generated {
528
528
  text-align: center;
529
529
  }
530
+ .lh-env__title {
531
+ font-size: var(--env-item-font-size-big);
532
+ line-height: var(--env-item-line-height-big);
533
+ text-align: center;
534
+ padding: var(--score-container-padding);
535
+ }
536
+ .lh-env {
537
+ padding: var(--default-padding) 0;
538
+ }
539
+ .lh-env__items {
540
+ padding-left: 16px;
541
+ margin: 0 0 var(--audits-margin-bottom);
542
+ padding: 0;
543
+ }
544
+ .lh-env__items .lh-env__item:nth-child(2n) {
545
+ background-color: var(--env-item-background-color);
546
+ }
547
+ .lh-env__item {
548
+ display: flex;
549
+ padding: var(--env-item-padding);
550
+ position: relative;
551
+ }
552
+ span.lh-env__name {
553
+ font-weight: bold;
554
+ min-width: var(--env-name-min-width);
555
+ flex: 0.5;
556
+ padding: 0 8px;
557
+ }
558
+ span.lh-env__description {
559
+ text-align: left;
560
+ flex: 1;
561
+ }
530
562
  </style>
531
563
  <footer class="lh-footer">
532
- <ul class="lh-meta__items">
533
- </ul>
564
+ <!-- TODO(i18n): localize runtime settings -->
565
+ <div class="lh-env">
566
+ <div class="lh-env__title">Runtime Settings</div>
567
+ <ul class="lh-env__items">
568
+ <!-- envItem -->
569
+ </ul>
570
+ </div>
534
571
 
535
572
  <div class="lh-generated">
536
573
  <!-- TODO(i18n): use ICU replacement to replace version w/o concatenation. -->
@@ -540,6 +577,14 @@ limitations under the License.
540
577
  </footer>
541
578
  </template>
542
579
 
580
+ <!-- Lighthouse footer env item -->
581
+ <template id="envItem">
582
+ <li class="lh-env__item">
583
+ <span class="lh-env__name"></span>
584
+ <span class="lh-env__description"></span>
585
+ </li>
586
+ </template>
587
+
543
588
  <!-- Lighthouse score gauge -->
544
589
  <template id="gauge">
545
590
  <a class="lh-gauge__wrapper">