chrome-devtools-frontend 1.0.1669021 → 1.0.1672557

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 (302) hide show
  1. package/.agents/skills/fixing-skipped-tests/SKILL.md +6 -6
  2. package/.agents/skills/gerrit-cli/SKILL.md +4 -10
  3. package/.agents/skills/gerrit-cli/references/commands.md +45 -2
  4. package/.agents/skills/gerrit-cli/references/workflows.md +7 -0
  5. package/.agents/skills/gerrit-cli/scripts/import_upstream.py +34 -152
  6. package/config/typescript/tsconfig.eslint.json +1 -1
  7. package/docs/contributing/settings-experiments-features.md +2 -8
  8. package/docs/ecosystem/automatic_workspace_folders.md +0 -19
  9. package/eslint.config.mjs +5 -5
  10. package/front_end/core/common/Lazy.ts +3 -3
  11. package/front_end/core/common/SettingRegistration.ts +0 -7
  12. package/front_end/core/common/Settings.ts +0 -38
  13. package/front_end/core/host/UserMetrics.ts +187 -953
  14. package/front_end/core/host/UserMetricsEnums.ts +949 -0
  15. package/front_end/core/root/Runtime.ts +21 -138
  16. package/front_end/core/sdk/CSSMetadata.ts +70 -65
  17. package/front_end/core/sdk/CategorizedBreakpoint.ts +0 -1
  18. package/front_end/core/sdk/ChildTargetManager.ts +0 -2
  19. package/front_end/core/sdk/EmulationModel.ts +0 -2
  20. package/front_end/core/sdk/EventBreakpointsModel.ts +0 -4
  21. package/front_end/core/sdk/NetworkManager.ts +0 -3
  22. package/front_end/core/sdk/PageResourceLoader.ts +9 -9
  23. package/front_end/core/sdk/RehydratingConnection.ts +52 -4
  24. package/front_end/core/sdk/Target.ts +0 -4
  25. package/front_end/devtools_compatibility.js +886 -0
  26. package/front_end/entrypoints/inspector_main/RenderingOptions.ts +7 -6
  27. package/front_end/entrypoints/main/ExecutionContextSelector.ts +0 -1
  28. package/front_end/entrypoints/main/MainImpl.ts +18 -22
  29. package/front_end/foundation/Universe.ts +7 -2
  30. package/front_end/generated/InspectorBackendCommands.ts +3 -10
  31. package/front_end/generated/{SupportedCSSProperties.js → SupportedCSSProperties.ts} +16 -0
  32. package/front_end/generated/protocol-mapping.d.ts +0 -42
  33. package/front_end/generated/protocol-proxy-api.d.ts +0 -38
  34. package/front_end/generated/protocol.ts +9 -169
  35. package/front_end/models/ai_assistance/AiAgent2.ts +11 -3
  36. package/front_end/models/ai_assistance/AiConversation.ts +1 -0
  37. package/front_end/models/ai_assistance/AiHistoryStorage.ts +8 -5
  38. package/front_end/models/ai_assistance/AiSetting.ts +108 -0
  39. package/front_end/models/ai_assistance/AiUtils.ts +47 -0
  40. package/front_end/models/ai_assistance/ChangeManager.ts +1 -0
  41. package/front_end/models/ai_assistance/ExtensionScope.ts +3 -12
  42. package/front_end/models/ai_assistance/agents/AiAgent.ts +11 -18
  43. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +3 -0
  44. package/front_end/models/ai_assistance/agents/ExecuteJavascript.ts +42 -17
  45. package/front_end/models/ai_assistance/agents/PerformanceAgent.snapshot.txt +1 -1
  46. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +3 -2
  47. package/front_end/models/ai_assistance/agents/StorageAgent.ts +253 -155
  48. package/front_end/models/ai_assistance/agents/StylingAgent.snapshot.txt +2 -2
  49. package/front_end/models/ai_assistance/ai_assistance.ts +4 -0
  50. package/front_end/models/ai_assistance/contexts/PerformanceTraceContext.ts +12 -6
  51. package/front_end/models/ai_assistance/data_formatters/FileFormatter.ts +3 -1
  52. package/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.ts +1 -0
  53. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +4 -3
  54. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +1 -1
  55. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +1 -0
  56. package/front_end/models/ai_assistance/injected.ts +1 -0
  57. package/front_end/models/ai_assistance/performance/AICallTree.ts +1 -0
  58. package/front_end/models/ai_assistance/skills/Skill.ts +1 -1
  59. package/front_end/models/ai_assistance/skills/SkillRegistry.ts +2 -0
  60. package/front_end/models/ai_assistance/skills/performance.md +10 -0
  61. package/front_end/models/ai_assistance/tools/ExecuteJavaScript.ts +52 -5
  62. package/front_end/models/ai_assistance/tools/GetElementAccessibilityDetails.ts +4 -4
  63. package/front_end/models/ai_assistance/tools/GetLighthouseAudits.ts +4 -4
  64. package/front_end/models/ai_assistance/tools/GetNetworkRequestDetails.ts +5 -4
  65. package/front_end/models/ai_assistance/tools/GetStyles.ts +5 -4
  66. package/front_end/models/ai_assistance/tools/ListNetworkRequests.ts +5 -4
  67. package/front_end/models/ai_assistance/tools/README.md +1 -1
  68. package/front_end/models/ai_assistance/tools/RecordPerformanceTrace.ts +63 -0
  69. package/front_end/models/ai_assistance/tools/ResolveDevtoolsNodePath.ts +5 -5
  70. package/front_end/models/ai_assistance/tools/Tool.ts +118 -24
  71. package/front_end/models/ai_assistance/tools/ToolRegistry.ts +2 -0
  72. package/front_end/models/badges/UserBadges.ts +2 -0
  73. package/front_end/models/bindings/NetworkProject.ts +5 -0
  74. package/front_end/models/bindings/ResourceScriptMapping.ts +2 -0
  75. package/front_end/models/bindings/ResourceUtils.ts +3 -0
  76. package/front_end/models/crux-manager/CrUXManager.ts +1 -0
  77. package/front_end/models/emulation/DeviceModeModel.ts +140 -7
  78. package/front_end/models/emulation/EmulatedDevices.ts +246 -793
  79. package/front_end/models/issues_manager/IssuesManager.ts +10 -2
  80. package/front_end/models/live-metrics/LiveMetrics.ts +41 -9
  81. package/front_end/models/logs/LogManager.ts +8 -5
  82. package/front_end/models/logs/NetworkLog.ts +1 -0
  83. package/front_end/models/persistence/IsolatedFileSystemManager.ts +21 -3
  84. package/front_end/models/persistence/NetworkPersistenceManager.ts +6 -0
  85. package/front_end/models/project_settings/ProjectSettingsModel.ts +8 -12
  86. package/front_end/models/trace/Processor.ts +42 -10
  87. package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +12 -19
  88. package/front_end/models/trace/handlers/MetaHandler.ts +38 -5
  89. package/front_end/models/trace/insights/CLSCulprits.ts +1 -2
  90. package/front_end/models/trace/insights/CharacterSet.ts +1 -1
  91. package/front_end/models/trace/insights/Common.ts +21 -2
  92. package/front_end/models/trace/insights/DocumentLatency.ts +1 -1
  93. package/front_end/models/trace/insights/LCPBreakdown.ts +7 -6
  94. package/front_end/models/trace/insights/LCPDiscovery.ts +1 -1
  95. package/front_end/models/trace/insights/ModernHTTP.ts +7 -3
  96. package/front_end/models/trace/insights/NetworkDependencyTree.ts +1 -1
  97. package/front_end/models/trace/insights/RenderBlocking.ts +1 -1
  98. package/front_end/models/trace/insights/ThirdParties.ts +5 -2
  99. package/front_end/models/trace/insights/types.ts +11 -6
  100. package/front_end/models/trace/types/Configuration.ts +5 -0
  101. package/front_end/models/trace_source_maps_resolver/SourceMapsResolver.ts +3 -1
  102. package/front_end/models/workspace/IgnoreListManager.ts +2 -0
  103. package/front_end/models/workspace/UISourceCode.ts +2 -0
  104. package/front_end/models/workspace_diff/WorkspaceDiff.ts +4 -0
  105. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +22 -22
  106. package/front_end/panels/ai_assistance/ai_assistance-meta.ts +0 -7
  107. package/front_end/panels/ai_assistance/components/ChatInput.ts +4 -0
  108. package/front_end/panels/ai_assistance/components/ChatMessage.ts +79 -34
  109. package/front_end/panels/ai_assistance/components/WalkthroughView.ts +1 -2
  110. package/front_end/panels/ai_assistance/components/walkthroughView.css +1 -1
  111. package/front_end/panels/application/ApplicationPanelSidebar.ts +9 -106
  112. package/front_end/panels/application/ApplicationPanelTreeElement.ts +1 -1
  113. package/front_end/panels/application/application.ts +0 -10
  114. package/front_end/panels/application/components/components.ts +0 -4
  115. package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +0 -5
  116. package/front_end/panels/browser_debugger/EventListenerBreakpointsSidebarPane.ts +6 -12
  117. package/front_end/panels/browser_debugger/browser_debugger-meta.ts +5 -3
  118. package/front_end/panels/console/ConsoleFormat.ts +2 -62
  119. package/front_end/panels/console/ConsoleViewMessage.ts +14 -7
  120. package/front_end/panels/elements/ElementsTreeElement.ts +1 -2
  121. package/front_end/panels/emulation/AdvancedApp.ts +1 -2
  122. package/front_end/panels/emulation/DeviceModeToolbar.ts +83 -69
  123. package/front_end/panels/emulation/DeviceModeView.ts +4 -134
  124. package/front_end/panels/emulation/DeviceModeWrapper.ts +52 -69
  125. package/front_end/panels/emulation/MediaQueryInspector.ts +2 -2
  126. package/front_end/panels/emulation/emulation-meta.ts +12 -12
  127. package/front_end/panels/issues/IssuesPane.ts +3 -1
  128. package/front_end/panels/lighthouse/LighthouseController.ts +6 -0
  129. package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +17 -21
  130. package/front_end/panels/linear_memory_inspector/components/LinearMemoryNavigator.ts +206 -126
  131. package/front_end/panels/linear_memory_inspector/components/linearMemoryInspector.css +1 -1
  132. package/front_end/panels/mobile_throttling/CalibrationController.ts +1 -1
  133. package/front_end/panels/mobile_throttling/MobileThrottlingSelector.ts +3 -3
  134. package/front_end/panels/mobile_throttling/NetworkPanelIndicator.ts +6 -6
  135. package/front_end/panels/mobile_throttling/NetworkThrottlingSelector.ts +14 -12
  136. package/front_end/panels/mobile_throttling/ThrottlingManager.ts +13 -13
  137. package/front_end/panels/mobile_throttling/ThrottlingPresets.ts +10 -10
  138. package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +28 -28
  139. package/front_end/panels/mobile_throttling/mobile_throttling-meta.ts +6 -6
  140. package/front_end/panels/network/RequestHeadersView.ts +1 -1
  141. package/front_end/panels/network/ResourceChunkView.ts +243 -144
  142. package/front_end/panels/network/ResourceDirectSocketChunkView.ts +52 -29
  143. package/front_end/panels/network/ResourceWebSocketFrameView.ts +21 -35
  144. package/front_end/panels/network/resourceChunkView.css +41 -36
  145. package/front_end/panels/profiler/HeapDetachedElementsDataGrid.ts +21 -12
  146. package/front_end/panels/profiler/profiler.ts +4 -0
  147. package/front_end/panels/recorder/RecorderPanel.ts +6 -14
  148. package/front_end/panels/sensors/LocationsSettingsTab.ts +7 -7
  149. package/front_end/panels/settings/AISettingsTab.ts +75 -31
  150. package/front_end/panels/settings/SettingsScreen.ts +8 -13
  151. package/front_end/panels/settings/components/SyncSection.ts +3 -4
  152. package/front_end/panels/settings/emulation/DevicesSettingsTab.ts +650 -18
  153. package/front_end/panels/settings/emulation/devicesSettingsTab.css +18 -0
  154. package/front_end/panels/settings/settings-meta.ts +0 -1
  155. package/front_end/panels/sources/CategorizedBreakpointL10n.ts +0 -2
  156. package/front_end/panels/sources/DebuggerPausedMessage.ts +11 -5
  157. package/front_end/panels/sources/DebuggerPlugin.ts +1 -1
  158. package/front_end/panels/sources/EditingLocationHistoryManager.ts +12 -9
  159. package/front_end/panels/sources/SourcesPanel.ts +19 -17
  160. package/front_end/panels/sources/SourcesView.ts +191 -96
  161. package/front_end/panels/sources/TabbedEditorContainer.ts +3 -4
  162. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +2 -5
  163. package/front_end/panels/timeline/TimelinePanel.ts +2 -0
  164. package/front_end/panels/timeline/TimelineUIUtils.ts +15 -0
  165. package/front_end/panels/timeline/components/CWVMetrics.ts +16 -3
  166. package/front_end/panels/timeline/components/cwvMetrics.css +4 -0
  167. package/front_end/panels/timeline/components/liveMetricsView.css +0 -17
  168. package/front_end/panels/timeline/components/metricValueStyles.css +17 -0
  169. package/front_end/panels/timeline/timeline-meta.ts +3 -5
  170. package/front_end/third_party/chromium/README.chromium +1 -1
  171. package/front_end/third_party/codemirror.next/chunk/angular.js +1 -1
  172. package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
  173. package/front_end/third_party/codemirror.next/chunk/codemirror.js.map +1 -1
  174. package/front_end/third_party/codemirror.next/chunk/cpp.js +1 -1
  175. package/front_end/third_party/codemirror.next/chunk/cpp.js.map +1 -1
  176. package/front_end/third_party/codemirror.next/chunk/java.js +1 -1
  177. package/front_end/third_party/codemirror.next/chunk/java.js.map +1 -1
  178. package/front_end/third_party/codemirror.next/chunk/legacy.js +1 -1
  179. package/front_end/third_party/codemirror.next/chunk/less.js +1 -1
  180. package/front_end/third_party/codemirror.next/chunk/less.js.map +1 -1
  181. package/front_end/third_party/codemirror.next/chunk/markdown.js +1 -1
  182. package/front_end/third_party/codemirror.next/chunk/markdown.js.map +1 -1
  183. package/front_end/third_party/codemirror.next/chunk/php.js +1 -1
  184. package/front_end/third_party/codemirror.next/chunk/php.js.map +1 -1
  185. package/front_end/third_party/codemirror.next/chunk/python.js +1 -1
  186. package/front_end/third_party/codemirror.next/chunk/python.js.map +1 -1
  187. package/front_end/third_party/codemirror.next/chunk/sass.js +1 -1
  188. package/front_end/third_party/codemirror.next/chunk/sass.js.map +1 -1
  189. package/front_end/third_party/codemirror.next/chunk/svelte.js +1 -1
  190. package/front_end/third_party/codemirror.next/chunk/svelte.js.map +1 -1
  191. package/front_end/third_party/codemirror.next/chunk/vue.js +1 -1
  192. package/front_end/third_party/codemirror.next/chunk/wast.js +1 -1
  193. package/front_end/third_party/codemirror.next/chunk/wast.js.map +1 -1
  194. package/front_end/third_party/codemirror.next/chunk/xml.js +1 -1
  195. package/front_end/third_party/codemirror.next/chunk/xml.js.map +1 -1
  196. package/front_end/third_party/codemirror.next/codemirror.next.d.ts +1332 -193
  197. package/front_end/third_party/codemirror.next/codemirror.next.js +1 -1
  198. package/front_end/third_party/codemirror.next/rebuild.sh +1 -1
  199. package/front_end/third_party/puppeteer/README.chromium +2 -2
  200. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +64 -15
  201. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +65 -16
  202. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts +50 -7
  203. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts.map +1 -1
  204. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js.map +1 -1
  205. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.d.ts +2 -1
  206. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.d.ts.map +1 -1
  207. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.js +5 -5
  208. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.js.map +1 -1
  209. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Connection.d.ts +2 -1
  210. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Connection.d.ts.map +1 -1
  211. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Connection.js +8 -6
  212. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Connection.js.map +1 -1
  213. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Dialog.d.ts.map +1 -1
  214. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Dialog.js +3 -0
  215. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Dialog.js.map +1 -1
  216. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts.map +1 -1
  217. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js +16 -1
  218. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js.map +1 -1
  219. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Connection.d.ts +5 -1
  220. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Connection.d.ts.map +1 -1
  221. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Connection.js +11 -6
  222. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Connection.js.map +1 -1
  223. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Dialog.d.ts.map +1 -1
  224. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Dialog.js +5 -0
  225. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Dialog.js.map +1 -1
  226. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.d.ts.map +1 -1
  227. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.js +10 -0
  228. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.js.map +1 -1
  229. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.js +4 -3
  230. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.js.map +1 -1
  231. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/Debug.d.ts +27 -2
  232. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/Debug.d.ts.map +1 -1
  233. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/Debug.js +12 -1
  234. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/Debug.js.map +1 -1
  235. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.d.ts +2 -2
  236. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.d.ts.map +1 -1
  237. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.js +2 -2
  238. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.js.map +1 -1
  239. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  240. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ChromeLauncher.js +2 -0
  241. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ChromeLauncher.js.map +1 -1
  242. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.d.ts +2 -1
  243. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.d.ts.map +1 -1
  244. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.js +5 -4
  245. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.js.map +1 -1
  246. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.d.ts +3 -3
  247. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js +3 -3
  248. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.d.ts +1 -1
  249. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.js +1 -1
  250. package/front_end/third_party/puppeteer/package/lib/types.d.ts +64 -15
  251. package/front_end/third_party/puppeteer/package/package.json +2 -2
  252. package/front_end/third_party/puppeteer/package/src/api/Page.ts +50 -7
  253. package/front_end/third_party/puppeteer/package/src/bidi/BidiOverCdp.ts +9 -7
  254. package/front_end/third_party/puppeteer/package/src/bidi/Connection.ts +9 -6
  255. package/front_end/third_party/puppeteer/package/src/bidi/Dialog.ts +4 -0
  256. package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +24 -1
  257. package/front_end/third_party/puppeteer/package/src/cdp/Connection.ts +11 -6
  258. package/front_end/third_party/puppeteer/package/src/cdp/Dialog.ts +7 -0
  259. package/front_end/third_party/puppeteer/package/src/cdp/NetworkManager.ts +11 -0
  260. package/front_end/third_party/puppeteer/package/src/common/BrowserConnector.ts +7 -3
  261. package/front_end/third_party/puppeteer/package/src/common/Debug.ts +30 -5
  262. package/front_end/third_party/puppeteer/package/src/common/util.ts +2 -2
  263. package/front_end/third_party/puppeteer/package/src/node/ChromeLauncher.ts +2 -0
  264. package/front_end/third_party/puppeteer/package/src/node/ScreenRecorder.ts +6 -4
  265. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  266. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  267. package/front_end/tsconfig.compatibility.json +2 -1
  268. package/front_end/tsconfig.json +1 -1
  269. package/front_end/ui/components/icon_button/IconButton.ts +1 -1
  270. package/front_end/ui/components/issue_counter/IssueCounter.ts +1 -1
  271. package/front_end/ui/components/settings/SettingCheckbox.ts +4 -7
  272. package/front_end/ui/components/settings/settings.ts +1 -2
  273. package/front_end/ui/legacy/Treeoutline.ts +52 -30
  274. package/front_end/ui/legacy/components/object_ui/CSSStyleSanitizer.ts +74 -0
  275. package/front_end/ui/legacy/components/object_ui/CustomPreviewComponent.ts +6 -1
  276. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +47 -54
  277. package/front_end/ui/legacy/components/object_ui/object_ui.ts +2 -0
  278. package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +5 -27
  279. package/front_end/ui/legacy/components/settings_ui/SettingsUI.ts +10 -12
  280. package/front_end/ui/settings/SettingUIRegistration.ts +0 -8
  281. package/front_end/ui/visual_logging/KnownContextValues.ts +37 -0
  282. package/inspector_overlay/tsconfig.json +8 -2
  283. package/package.json +3 -2
  284. package/.agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py +0 -47
  285. package/front_end/core/sdk/CSSModel.test.api.ts +0 -102
  286. package/front_end/core/sdk/DOMModel.test.api.ts +0 -104
  287. package/front_end/foundation/Universe.test.api.ts +0 -73
  288. package/front_end/panels/application/SharedStorageEventsView.ts +0 -128
  289. package/front_end/panels/application/SharedStorageItemsView.ts +0 -179
  290. package/front_end/panels/application/SharedStorageListTreeElement.ts +0 -65
  291. package/front_end/panels/application/SharedStorageModel.ts +0 -249
  292. package/front_end/panels/application/SharedStorageTreeElement.ts +0 -40
  293. package/front_end/panels/application/components/SharedStorageAccessGrid.ts +0 -191
  294. package/front_end/panels/application/components/SharedStorageMetadataView.ts +0 -133
  295. package/front_end/panels/application/components/sharedStorageAccessGrid.css +0 -29
  296. package/front_end/panels/application/components/sharedStorageMetadataView.css +0 -29
  297. package/front_end/panels/application/sharedStorageEventsView.css +0 -9
  298. package/front_end/panels/network/OriginalResourceChunkView.ts +0 -340
  299. package/front_end/panels/network/originalResourceChunkView.css +0 -49
  300. package/front_end/ui/components/settings/SettingDeprecationWarning.ts +0 -47
  301. package/front_end/ui/components/settings/settingDeprecationWarning.css +0 -14
  302. /package/front_end/generated/{ARIAProperties.js → ARIAProperties.ts} +0 -0
@@ -7,6 +7,7 @@
7
7
 
8
8
  import * as Common from '../../core/common/common.js';
9
9
  import * as i18n from '../../core/i18n/i18n.js';
10
+ import type * as Platform from '../../core/platform/platform.js';
10
11
  import * as Root from '../../core/root/root.js';
11
12
  import * as SDK from '../../core/sdk/sdk.js';
12
13
  import type * as Protocol from '../../generated/protocol.js';
@@ -26,9 +27,26 @@ const UIStrings = {
26
27
  * @description Title of the Laptop with MDPI screen device.
27
28
  */
28
29
  laptopWithMDPIScreen: 'Laptop with MDPI screen',
30
+ /**
31
+ * @description Label for mobile category in emulation devices.
32
+ */
33
+ mobileGroup: 'Mobile',
34
+ /**
35
+ * @description Label for foldables category in emulation devices.
36
+ */
37
+ foldablesGroup: 'Foldables',
38
+ /**
39
+ * @description Label for tablets and desktops category in emulation devices.
40
+ */
41
+ tabletsAndDesktopsGroup: 'Tablets & Desktops',
42
+ /**
43
+ * @description Label for smart displays category in emulation devices.
44
+ */
45
+ smartDisplaysGroup: 'Smart Displays',
29
46
  } as const;
30
47
  const str_ = i18n.i18n.registerUIStrings('models/emulation/EmulatedDevices.ts', UIStrings);
31
48
  const i18nLazyString = i18n.i18n.getLazilyComputedLocalizedString.bind(undefined, str_);
49
+ const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
32
50
 
33
51
  export function computeRelativeImageURL(cssURLValue: string): string {
34
52
  return cssURLValue.replace(/@url\(([^\)]*?)\)/g, (_match: string, url: string) => {
@@ -553,16 +571,58 @@ export const Vertical = 'vertical';
553
571
  export const HorizontalSpanned = 'horizontal-spanned';
554
572
  export const VerticalSpanned = 'vertical-spanned';
555
573
 
556
- enum Type {
574
+ export enum Type {
557
575
  /* eslint-disable @typescript-eslint/naming-convention -- Indexed access. */
558
576
  Phone = 'phone',
559
577
  Tablet = 'tablet',
560
578
  Notebook = 'notebook',
561
579
  Desktop = 'desktop',
580
+ Foldable = 'foldable',
581
+ SmartDisplay = 'smart-display',
562
582
  Unknown = 'unknown',
563
583
  /* eslint-enable @typescript-eslint/naming-convention */
564
584
  }
565
585
 
586
+ export const enum Category {
587
+ MOBILE = 'mobile',
588
+ FOLDABLE = 'foldable',
589
+ TABLET_DESKTOP = 'tablet_desktop',
590
+ SMART_DISPLAY = 'smart_display',
591
+ }
592
+
593
+ export function deviceCategory(device: EmulatedDevice): Category {
594
+ if (device.type === Type.Foldable || device.isFoldableScreen || device.isDualScreen) {
595
+ return Category.FOLDABLE;
596
+ }
597
+ if (device.type === Type.SmartDisplay) {
598
+ return Category.SMART_DISPLAY;
599
+ }
600
+ if (device.type === Type.Tablet || device.type === Type.Notebook || device.type === Type.Desktop) {
601
+ return Category.TABLET_DESKTOP;
602
+ }
603
+ return Category.MOBILE;
604
+ }
605
+
606
+ export const CATEGORY_ORDER: readonly Category[] = [
607
+ Category.MOBILE,
608
+ Category.FOLDABLE,
609
+ Category.TABLET_DESKTOP,
610
+ Category.SMART_DISPLAY,
611
+ ];
612
+
613
+ export function getCategoryTitle(category: Category): Platform.UIString.LocalizedString {
614
+ switch (category) {
615
+ case Category.MOBILE:
616
+ return i18nString(UIStrings.mobileGroup);
617
+ case Category.FOLDABLE:
618
+ return i18nString(UIStrings.foldablesGroup);
619
+ case Category.TABLET_DESKTOP:
620
+ return i18nString(UIStrings.tabletsAndDesktopsGroup);
621
+ case Category.SMART_DISPLAY:
622
+ return i18nString(UIStrings.smartDisplaysGroup);
623
+ }
624
+ }
625
+
566
626
  export const enum Capability {
567
627
  TOUCH = 'touch',
568
628
  MOBILE = 'mobile',
@@ -599,6 +659,7 @@ export class EmulatedDevicesList extends Common.ObjectWrapper.ObjectWrapper<Even
599
659
  static instance(): EmulatedDevicesList {
600
660
  if (!Root.DevToolsContext.globalInstance().has(EmulatedDevicesList)) {
601
661
  Root.DevToolsContext.globalInstance().set(EmulatedDevicesList,
662
+ // eslint-disable-next-line @devtools/no-instance-of-migrated-singletons
602
663
  new EmulatedDevicesList(Common.Settings.Settings.instance()));
603
664
  }
604
665
  return Root.DevToolsContext.globalInstance().get(EmulatedDevicesList);
@@ -797,7 +858,7 @@ const emulatedDevices = [
797
858
  },
798
859
  {
799
860
  'order': 12,
800
- 'show-by-default': true,
861
+ 'show-by-default': false,
801
862
  'title': 'iPhone XR',
802
863
  'screen': {
803
864
  'horizontal': {
@@ -835,7 +896,7 @@ const emulatedDevices = [
835
896
  },
836
897
  {
837
898
  'order': 14,
838
- 'show-by-default': true,
899
+ 'show-by-default': false,
839
900
  'title': 'iPhone 12 Pro',
840
901
  'screen': {
841
902
  'horizontal': {
@@ -986,7 +1047,7 @@ const emulatedDevices = [
986
1047
  },
987
1048
  {
988
1049
  'order': 18,
989
- 'show-by-default': true,
1050
+ 'show-by-default': false,
990
1051
  'title': 'iPhone 14 Pro Max',
991
1052
  'screen': {
992
1053
  'horizontal': {
@@ -1134,7 +1195,7 @@ const emulatedDevices = [
1134
1195
  },
1135
1196
  {
1136
1197
  'order': 22,
1137
- 'show-by-default': true,
1198
+ 'show-by-default': false,
1138
1199
  'title': 'iPhone 15 Pro Max',
1139
1200
  'screen': {
1140
1201
  'horizontal': {
@@ -1209,7 +1270,7 @@ const emulatedDevices = [
1209
1270
  },
1210
1271
  {
1211
1272
  'order': 24,
1212
- 'show-by-default': false,
1273
+ 'show-by-default': true,
1213
1274
  'title': 'iPhone 16',
1214
1275
  'screen': {
1215
1276
  'horizontal': {
@@ -1355,46 +1416,10 @@ const emulatedDevices = [
1355
1416
  },
1356
1417
  ],
1357
1418
  },
1358
- {
1359
- 'order': 28,
1360
- 'show-by-default': false,
1361
- 'title': 'Pixel 3 XL',
1362
- 'screen': {
1363
- 'horizontal': {
1364
- 'width': 786,
1365
- 'height': 393,
1366
- },
1367
- 'device-pixel-ratio': 2.75,
1368
- 'vertical': {
1369
- 'width': 393,
1370
- 'height': 786,
1371
- },
1372
- },
1373
- 'capabilities': ['touch', 'mobile'],
1374
- 'user-agent':
1375
- 'Mozilla/5.0 (Linux; Android 11; Pixel 3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
1376
- 'user-agent-metadata':
1377
- {'platform': 'Android', 'platformVersion': '11', 'architecture': '', 'model': 'Pixel 3', 'mobile': true},
1378
- 'type': 'phone',
1379
- 'modes': [
1380
- {
1381
- 'title': 'default',
1382
- 'orientation': 'vertical',
1383
- 'insets': {'left': 0, 'top': 0, 'right': 0, 'bottom': 0},
1384
- 'safe-area-insets': {'left': 0, 'top': 45, 'right': 0, 'bottom': 0},
1385
- 'cutout': {'shape': 'rectangle', 'x': 126, 'y': 0, 'width': 141, 'height': 45},
1386
- },
1387
- {
1388
- 'title': 'default',
1389
- 'orientation': 'horizontal',
1390
- 'insets': {'left': 0, 'top': 0, 'right': 0, 'bottom': 0},
1391
- 'safe-area-insets': {'left': 0, 'top': 0, 'right': 45, 'bottom': 0},
1392
- },
1393
- ],
1394
- },
1419
+
1395
1420
  {
1396
1421
  'order': 30,
1397
- 'show-by-default': true,
1422
+ 'show-by-default': false,
1398
1423
  'title': 'Pixel 7',
1399
1424
  'screen': {
1400
1425
  'horizontal': {
@@ -1431,7 +1456,7 @@ const emulatedDevices = [
1431
1456
  },
1432
1457
  {
1433
1458
  'order': 31,
1434
- 'show-by-default': true,
1459
+ 'show-by-default': false,
1435
1460
  'title': 'Pixel 8',
1436
1461
  'screen': {
1437
1462
  'horizontal': {
@@ -1579,7 +1604,7 @@ const emulatedDevices = [
1579
1604
  },
1580
1605
  {
1581
1606
  'order': 35,
1582
- 'show-by-default': false,
1607
+ 'show-by-default': true,
1583
1608
  'title': 'Pixel 9 Pro',
1584
1609
  'screen': {
1585
1610
  'horizontal': {
@@ -1690,7 +1715,7 @@ const emulatedDevices = [
1690
1715
  },
1691
1716
  {
1692
1717
  'order': 38,
1693
- 'show-by-default': true,
1718
+ 'show-by-default': false,
1694
1719
  'title': 'Samsung Galaxy S8+',
1695
1720
  'screen': {
1696
1721
  'horizontal': {
@@ -1712,7 +1737,7 @@ const emulatedDevices = [
1712
1737
  },
1713
1738
  {
1714
1739
  'order': 39,
1715
- 'show-by-default': true,
1740
+ 'show-by-default': false,
1716
1741
  'title': 'Samsung Galaxy S20 Ultra',
1717
1742
  'screen': {
1718
1743
  'horizontal': {
@@ -1732,46 +1757,45 @@ const emulatedDevices = [
1732
1757
  {'platform': 'Android', 'platformVersion': '13', 'architecture': '', 'model': 'SM-G981B', 'mobile': true},
1733
1758
  'type': 'phone',
1734
1759
  },
1760
+
1735
1761
  {
1736
- 'order': 40,
1737
- 'show-by-default': true,
1738
- 'title': 'iPad Mini',
1762
+ 'order': 43,
1763
+ 'show-by-default': false,
1764
+ 'title': 'Surface Pro 7',
1739
1765
  'screen': {
1740
1766
  'horizontal': {
1741
- 'width': 1024,
1742
- 'height': 768,
1767
+ 'width': 1368,
1768
+ 'height': 912,
1743
1769
  },
1744
1770
  'device-pixel-ratio': 2,
1745
1771
  'vertical': {
1746
- 'width': 768,
1747
- 'height': 1024,
1772
+ 'width': 912,
1773
+ 'height': 1368,
1748
1774
  },
1749
1775
  },
1750
1776
  'capabilities': ['touch', 'mobile'],
1751
1777
  'user-agent':
1752
- 'Mozilla/5.0 (iPad; CPU OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
1753
- 'user-agent-metadata':
1754
- {'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPad', 'mobile': true},
1778
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36',
1755
1779
  'type': 'tablet',
1756
1780
  },
1757
1781
  {
1758
- 'order': 41,
1782
+ 'order': 40,
1759
1783
  'show-by-default': true,
1760
- 'title': 'iPad Air',
1784
+ 'title': 'iPad Mini',
1761
1785
  'screen': {
1762
1786
  'horizontal': {
1763
- 'width': 1180,
1764
- 'height': 820,
1787
+ 'width': 1024,
1788
+ 'height': 768,
1765
1789
  },
1766
1790
  'device-pixel-ratio': 2,
1767
1791
  'vertical': {
1768
- 'width': 820,
1769
- 'height': 1180,
1792
+ 'width': 768,
1793
+ 'height': 1024,
1770
1794
  },
1771
1795
  },
1772
1796
  'capabilities': ['touch', 'mobile'],
1773
1797
  'user-agent':
1774
- 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Safari/605.1.15',
1798
+ 'Mozilla/5.0 (iPad; CPU OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
1775
1799
  'user-agent-metadata':
1776
1800
  {'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPad', 'mobile': true},
1777
1801
  'type': 'tablet',
@@ -1779,16 +1803,16 @@ const emulatedDevices = [
1779
1803
  {
1780
1804
  'order': 42,
1781
1805
  'show-by-default': true,
1782
- 'title': 'iPad Pro',
1806
+ 'title': 'iPad Pro 13',
1783
1807
  'screen': {
1784
1808
  'horizontal': {
1785
- 'width': 1366,
1786
- 'height': 1024,
1809
+ 'width': 1376,
1810
+ 'height': 1032,
1787
1811
  },
1788
1812
  'device-pixel-ratio': 2,
1789
1813
  'vertical': {
1790
- 'width': 1024,
1791
- 'height': 1366,
1814
+ 'width': 1032,
1815
+ 'height': 1376,
1792
1816
  },
1793
1817
  },
1794
1818
  'capabilities': ['touch', 'mobile'],
@@ -1801,16 +1825,16 @@ const emulatedDevices = [
1801
1825
  {
1802
1826
  'order': 43,
1803
1827
  'show-by-default': true,
1804
- 'title': 'Surface Pro 7',
1828
+ 'title': 'Surface Pro 10',
1805
1829
  'screen': {
1806
1830
  'horizontal': {
1807
- 'width': 1368,
1808
- 'height': 912,
1831
+ 'width': 1440,
1832
+ 'height': 960,
1809
1833
  },
1810
1834
  'device-pixel-ratio': 2,
1811
1835
  'vertical': {
1812
- 'width': 912,
1813
- 'height': 1368,
1836
+ 'width': 960,
1837
+ 'height': 1440,
1814
1838
  },
1815
1839
  },
1816
1840
  'capabilities': ['touch', 'mobile'],
@@ -1820,7 +1844,7 @@ const emulatedDevices = [
1820
1844
  },
1821
1845
  {
1822
1846
  'order': 44,
1823
- 'show-by-default': true,
1847
+ 'show-by-default': false,
1824
1848
  'dual-screen': true,
1825
1849
  'title': 'Surface Duo',
1826
1850
  'screen': {
@@ -1855,10 +1879,133 @@ const emulatedDevices = [
1855
1879
  },
1856
1880
  ],
1857
1881
  },
1882
+ {
1883
+ 'order': 38,
1884
+ 'show-by-default': true,
1885
+ 'title': 'Samsung Galaxy A55',
1886
+ 'screen': {
1887
+ 'horizontal': {'width': 800, 'height': 360},
1888
+ 'device-pixel-ratio': 2.25,
1889
+ 'vertical': {'width': 360, 'height': 800},
1890
+ },
1891
+ 'capabilities': ['touch', 'mobile'],
1892
+ 'user-agent':
1893
+ 'Mozilla/5.0 (Linux; Android 14; SM-A556B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
1894
+ 'user-agent-metadata':
1895
+ {'platform': 'Android', 'platformVersion': '14', 'architecture': '', 'model': 'SM-A556B', 'mobile': true},
1896
+ 'type': 'phone',
1897
+ },
1898
+ {
1899
+ 'order': 45,
1900
+ 'show-by-default': true,
1901
+ 'foldable-screen': true,
1902
+ 'title': 'Pixel 9 Pro Fold',
1903
+ 'screen': {
1904
+ 'horizontal': {'width': 922, 'height': 412},
1905
+ 'device-pixel-ratio': 2.625,
1906
+ 'vertical': {'width': 412, 'height': 922},
1907
+ 'vertical-spanned': {
1908
+ 'width': 836,
1909
+ 'height': 842,
1910
+ 'hinge': {
1911
+ 'width': 0,
1912
+ 'height': 842,
1913
+ 'x': 418,
1914
+ 'y': 0,
1915
+ 'contentColor': {'r': 38, 'g': 38, 'b': 38, 'a': 0.2},
1916
+ 'outlineColor': {'r': 38, 'g': 38, 'b': 38, 'a': 0.7},
1917
+ },
1918
+ },
1919
+ 'horizontal-spanned': {
1920
+ 'width': 842,
1921
+ 'height': 836,
1922
+ 'hinge': {
1923
+ 'width': 842,
1924
+ 'height': 0,
1925
+ 'x': 0,
1926
+ 'y': 418,
1927
+ 'contentColor': {'r': 38, 'g': 38, 'b': 38, 'a': 0.2},
1928
+ 'outlineColor': {'r': 38, 'g': 38, 'b': 38, 'a': 0.7},
1929
+ },
1930
+ },
1931
+ },
1932
+ 'capabilities': ['touch', 'mobile'],
1933
+ 'user-agent':
1934
+ 'Mozilla/5.0 (Linux; Android 14; Pixel 9 Pro Fold) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
1935
+ 'user-agent-metadata': {
1936
+ 'platform': 'Android',
1937
+ 'platformVersion': '14',
1938
+ 'architecture': '',
1939
+ 'model': 'Pixel 9 Pro Fold',
1940
+ 'mobile': true,
1941
+ },
1942
+ 'type': 'phone',
1943
+ 'modes': [
1944
+ {'title': 'default', 'orientation': 'vertical', 'insets': {'left': 0, 'top': 0, 'right': 0, 'bottom': 0}},
1945
+ {'title': 'default', 'orientation': 'horizontal', 'insets': {'left': 0, 'top': 0, 'right': 0, 'bottom': 0}},
1946
+ {'title': 'spanned', 'orientation': 'vertical-spanned', 'insets': {'left': 0, 'top': 0, 'right': 0, 'bottom': 0}},
1947
+ {
1948
+ 'title': 'spanned',
1949
+ 'orientation': 'horizontal-spanned',
1950
+ 'insets': {'left': 0, 'top': 0, 'right': 0, 'bottom': 0},
1951
+ },
1952
+ ],
1953
+ },
1858
1954
  {
1859
1955
  'order': 46,
1860
1956
  'show-by-default': true,
1861
1957
  'foldable-screen': true,
1958
+ 'title': 'Galaxy Z Fold 6',
1959
+ 'screen': {
1960
+ 'horizontal': {'width': 968, 'height': 412},
1961
+ 'device-pixel-ratio': 2.625,
1962
+ 'vertical': {'width': 412, 'height': 968},
1963
+ 'vertical-spanned': {
1964
+ 'width': 744,
1965
+ 'height': 860,
1966
+ 'hinge': {
1967
+ 'width': 0,
1968
+ 'height': 860,
1969
+ 'x': 372,
1970
+ 'y': 0,
1971
+ 'contentColor': {'r': 38, 'g': 38, 'b': 38, 'a': 0.2},
1972
+ 'outlineColor': {'r': 38, 'g': 38, 'b': 38, 'a': 0.7},
1973
+ },
1974
+ },
1975
+ 'horizontal-spanned': {
1976
+ 'width': 860,
1977
+ 'height': 744,
1978
+ 'hinge': {
1979
+ 'width': 860,
1980
+ 'height': 0,
1981
+ 'x': 0,
1982
+ 'y': 372,
1983
+ 'contentColor': {'r': 38, 'g': 38, 'b': 38, 'a': 0.2},
1984
+ 'outlineColor': {'r': 38, 'g': 38, 'b': 38, 'a': 0.7},
1985
+ },
1986
+ },
1987
+ },
1988
+ 'capabilities': ['touch', 'mobile'],
1989
+ 'user-agent':
1990
+ 'Mozilla/5.0 (Linux; Android 14; SM-F956U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
1991
+ 'user-agent-metadata':
1992
+ {'platform': 'Android', 'platformVersion': '14', 'architecture': '', 'model': 'SM-F956U', 'mobile': true},
1993
+ 'type': 'phone',
1994
+ 'modes': [
1995
+ {'title': 'default', 'orientation': 'vertical', 'insets': {'left': 0, 'top': 0, 'right': 0, 'bottom': 0}},
1996
+ {'title': 'default', 'orientation': 'horizontal', 'insets': {'left': 0, 'top': 0, 'right': 0, 'bottom': 0}},
1997
+ {'title': 'spanned', 'orientation': 'vertical-spanned', 'insets': {'left': 0, 'top': 0, 'right': 0, 'bottom': 0}},
1998
+ {
1999
+ 'title': 'spanned',
2000
+ 'orientation': 'horizontal-spanned',
2001
+ 'insets': {'left': 0, 'top': 0, 'right': 0, 'bottom': 0},
2002
+ },
2003
+ ],
2004
+ },
2005
+ {
2006
+ 'order': 46,
2007
+ 'show-by-default': false,
2008
+ 'foldable-screen': true,
1862
2009
  'title': 'Galaxy Z Fold 5',
1863
2010
  'screen': {
1864
2011
  'horizontal': {'width': 882, 'height': 344},
@@ -1908,7 +2055,7 @@ const emulatedDevices = [
1908
2055
  },
1909
2056
  {
1910
2057
  'order': 47,
1911
- 'show-by-default': true,
2058
+ 'show-by-default': false,
1912
2059
  'foldable-screen': true,
1913
2060
  'title': 'Asus Zenbook Fold',
1914
2061
  'screen': {
@@ -1963,7 +2110,7 @@ const emulatedDevices = [
1963
2110
  },
1964
2111
  {
1965
2112
  'order': 48,
1966
- 'show-by-default': true,
2113
+ 'show-by-default': false,
1967
2114
  'title': 'Samsung Galaxy A51/71',
1968
2115
  'screen': {
1969
2116
  'horizontal': {
@@ -2005,741 +2152,47 @@ const emulatedDevices = [
2005
2152
  'capabilities': ['touch', 'mobile'],
2006
2153
  'user-agent':
2007
2154
  'Mozilla/5.0 (X11; Linux aarch64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36 CrKey/1.54.250320',
2008
- 'type': 'tablet',
2009
- 'modes': [{'title': 'default', 'orientation': 'horizontal'}],
2010
- },
2011
- {
2012
- 'order': 50,
2013
- 'show-by-default': true,
2014
- 'title': 'Nest Hub',
2015
- 'screen': {
2016
- 'horizontal': {
2017
- 'outline': {
2018
- 'image': '@url(optimized/google-nest-hub-horizontal.avif)',
2019
- 'insets': {'left': 82, 'top': 74, 'right': 83, 'bottom': 222},
2020
- },
2021
- 'width': 1024,
2022
- 'height': 600,
2023
- },
2024
- 'device-pixel-ratio': 2,
2025
- 'vertical': {
2026
- 'width': 1024,
2027
- 'height': 600,
2028
- },
2029
- },
2030
- 'capabilities': ['touch', 'mobile'],
2031
- 'user-agent':
2032
- 'Mozilla/5.0 (Linux; Android) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36 CrKey/1.54.248666',
2033
- 'user-agent-metadata':
2034
- {'platform': 'Android', 'platformVersion': '', 'architecture': '', 'model': '', 'mobile': false},
2035
- 'type': 'tablet',
2155
+ 'type': 'smart-display',
2036
2156
  'modes': [{'title': 'default', 'orientation': 'horizontal'}],
2037
2157
  },
2038
2158
 
2039
2159
  {
2040
- 'order': 129,
2041
2160
  'show-by-default': false,
2042
- 'title': 'iPhone 4',
2161
+ 'title': 'Galaxy Tab S4',
2043
2162
  'screen': {
2044
- 'horizontal': {'width': 480, 'height': 320},
2045
- 'device-pixel-ratio': 2,
2046
- 'vertical': {'width': 320, 'height': 480},
2163
+ 'horizontal': {'width': 1138, 'height': 712},
2164
+ 'device-pixel-ratio': 2.25,
2165
+ 'vertical': {'width': 712, 'height': 1138},
2047
2166
  },
2048
2167
  'capabilities': ['touch', 'mobile'],
2049
2168
  'user-agent':
2050
- 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53',
2169
+ 'Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36',
2051
2170
  'user-agent-metadata':
2052
- {'platform': 'iOS', 'platformVersion': '7.1.2', 'architecture': '', 'model': 'iPhone', 'mobile': true},
2171
+ {'platform': 'Android', 'platformVersion': '8.1.0', 'architecture': '', 'model': 'SM-T837A', 'mobile': false},
2053
2172
  'type': 'phone',
2054
2173
  },
2055
2174
  {
2056
- 'order': 130,
2175
+ 'order': 1,
2057
2176
  'show-by-default': false,
2058
- 'title': 'iPhone 5/SE',
2177
+ 'title': 'JioPhone 2',
2059
2178
  'screen': {
2060
- 'horizontal': {
2061
- 'outline': {
2062
- 'image': '@url(optimized/iPhone5-landscape.avif)',
2063
- 'insets': {'left': 115, 'top': 25, 'right': 115, 'bottom': 28},
2064
- },
2065
- 'width': 568,
2066
- 'height': 320,
2067
- },
2068
- 'device-pixel-ratio': 2,
2069
- 'vertical': {
2070
- 'outline': {
2071
- 'image': '@url(optimized/iPhone5-portrait.avif)',
2072
- 'insets': {'left': 29, 'top': 105, 'right': 25, 'bottom': 111},
2073
- },
2074
- 'width': 320,
2075
- 'height': 568,
2076
- },
2179
+ 'horizontal': {'width': 320, 'height': 240},
2180
+ 'device-pixel-ratio': 1,
2181
+ 'vertical': {'width': 240, 'height': 320},
2077
2182
  },
2078
2183
  'capabilities': ['touch', 'mobile'],
2079
2184
  'user-agent':
2080
- 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
2081
- 'user-agent-metadata':
2082
- {'platform': 'iOS', 'platformVersion': '10.3.1', 'architecture': '', 'model': 'iPhone', 'mobile': true},
2083
- 'type': 'phone',
2084
- },
2085
- {
2086
- 'order': 131,
2087
- 'show-by-default': false,
2088
- 'title': 'iPhone 6/7/8',
2089
- 'screen': {
2090
- 'horizontal': {
2091
- 'outline': {
2092
- 'image': '@url(optimized/iPhone6-landscape.avif)',
2093
- 'insets': {'left': 106, 'top': 28, 'right': 106, 'bottom': 28},
2094
- },
2095
- 'width': 667,
2096
- 'height': 375,
2097
- },
2098
- 'device-pixel-ratio': 2,
2099
- 'vertical': {
2100
- 'outline': {
2101
- 'image': '@url(optimized/iPhone6-portrait.avif)',
2102
- 'insets': {'left': 28, 'top': 105, 'right': 28, 'bottom': 105},
2103
- },
2104
- 'width': 375,
2105
- 'height': 667,
2106
- },
2107
- },
2108
- 'capabilities': ['touch', 'mobile'],
2109
- 'user-agent':
2110
- 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1',
2111
- 'user-agent-metadata':
2112
- {'platform': 'iOS', 'platformVersion': '13.2.3', 'architecture': '', 'model': 'iPhone', 'mobile': true},
2113
- 'type': 'phone',
2114
- },
2115
- {
2116
- 'order': 132,
2117
- 'show-by-default': false,
2118
- 'title': 'iPhone 6/7/8 Plus',
2119
- 'screen': {
2120
- 'horizontal': {
2121
- 'outline': {
2122
- 'image': '@url(optimized/iPhone6Plus-landscape.avif)',
2123
- 'insets': {'left': 109, 'top': 29, 'right': 109, 'bottom': 27},
2124
- },
2125
- 'width': 736,
2126
- 'height': 414,
2127
- },
2128
- 'device-pixel-ratio': 3,
2129
- 'vertical': {
2130
- 'outline': {
2131
- 'image': '@url(optimized/iPhone6Plus-portrait.avif)',
2132
- 'insets': {'left': 26, 'top': 107, 'right': 30, 'bottom': 111},
2133
- },
2134
- 'width': 414,
2135
- 'height': 736,
2136
- },
2137
- },
2138
- 'capabilities': ['touch', 'mobile'],
2139
- 'user-agent':
2140
- 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1',
2141
- 'user-agent-metadata':
2142
- {'platform': 'iOS', 'platformVersion': '13.2.3', 'architecture': '', 'model': 'iPhone', 'mobile': true},
2143
- 'type': 'phone',
2144
- },
2145
- {
2146
- 'order': 133,
2147
- 'show-by-default': false,
2148
- 'title': 'iPhone X',
2149
- 'screen': {
2150
- 'horizontal': {'width': 812, 'height': 375},
2151
- 'device-pixel-ratio': 3,
2152
- 'vertical': {'width': 375, 'height': 812},
2153
- },
2154
- 'capabilities': ['touch', 'mobile'],
2155
- 'user-agent':
2156
- 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1',
2157
- 'user-agent-metadata':
2158
- {'platform': 'iOS', 'platformVersion': '13.2.3', 'architecture': '', 'model': 'iPhone', 'mobile': true},
2159
- 'type': 'phone',
2160
- 'modes': [
2161
- {
2162
- 'title': 'default',
2163
- 'orientation': 'vertical',
2164
- 'insets': {'left': 0, 'top': 0, 'right': 0, 'bottom': 0},
2165
- 'safe-area-insets': {'left': 0, 'top': 44, 'right': 0, 'bottom': 34},
2166
- 'cutout':
2167
- {'shape': 'notch', 'x': 85, 'y': 0, 'width': 204, 'height': 30, 'upper-radius': 8, 'lower-radius': 19},
2168
- },
2169
- {
2170
- 'title': 'default',
2171
- 'orientation': 'horizontal',
2172
- 'insets': {'left': 0, 'top': 0, 'right': 0, 'bottom': 0},
2173
- 'safe-area-insets': {'left': 44, 'top': 0, 'right': 44, 'bottom': 21},
2174
- },
2175
- ],
2176
- },
2177
- {
2178
- 'show-by-default': false,
2179
- 'title': 'BlackBerry Z30',
2180
- 'screen': {
2181
- 'horizontal': {'width': 640, 'height': 360},
2182
- 'device-pixel-ratio': 2,
2183
- 'vertical': {'width': 360, 'height': 640},
2184
- },
2185
- 'capabilities': ['touch', 'mobile'],
2186
- 'user-agent':
2187
- 'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+',
2188
- 'type': 'phone',
2189
- },
2190
- {
2191
- 'show-by-default': false,
2192
- 'title': 'Nexus 4',
2193
- 'screen': {
2194
- 'horizontal': {'width': 640, 'height': 384},
2195
- 'device-pixel-ratio': 2,
2196
- 'vertical': {'width': 384, 'height': 640},
2197
- },
2198
- 'capabilities': ['touch', 'mobile'],
2199
- 'user-agent':
2200
- 'Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
2201
- 'user-agent-metadata':
2202
- {'platform': 'Android', 'platformVersion': '4.4.2', 'architecture': '', 'model': 'Nexus 4', 'mobile': true},
2203
- 'type': 'phone',
2204
- },
2205
- {
2206
- 'title': 'Nexus 5',
2207
- 'type': 'phone',
2208
- 'user-agent':
2209
- 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
2210
- 'user-agent-metadata':
2211
- {'platform': 'Android', 'platformVersion': '6.0', 'architecture': '', 'model': 'Nexus 5', 'mobile': true},
2212
- 'capabilities': ['touch', 'mobile'],
2213
- 'show-by-default': false,
2214
- 'screen': {
2215
- 'device-pixel-ratio': 3,
2216
- 'vertical': {'width': 360, 'height': 640},
2217
- 'horizontal': {'width': 640, 'height': 360},
2218
- },
2219
- 'modes': [
2220
- {
2221
- 'title': 'default',
2222
- 'orientation': 'vertical',
2223
- 'insets': {'left': 0, 'top': 25, 'right': 0, 'bottom': 48},
2224
- 'image':
2225
- '@url(optimized/google-nexus-5-vertical-default-1x.avif) 1x, @url(optimized/google-nexus-5-vertical-default-2x.avif) 2x',
2226
- },
2227
- {
2228
- 'title': 'navigation bar',
2229
- 'orientation': 'vertical',
2230
- 'insets': {'left': 0, 'top': 80, 'right': 0, 'bottom': 48},
2231
- 'image':
2232
- '@url(optimized/google-nexus-5-vertical-navigation-1x.avif) 1x, @url(optimized/google-nexus-5-vertical-navigation-2x.avif) 2x',
2233
- },
2234
- {
2235
- 'title': 'keyboard',
2236
- 'orientation': 'vertical',
2237
- 'insets': {'left': 0, 'top': 80, 'right': 0, 'bottom': 312},
2238
- 'image':
2239
- '@url(optimized/google-nexus-5-vertical-keyboard-1x.avif) 1x, @url(optimized/google-nexus-5-vertical-keyboard-2x.avif) 2x',
2240
- },
2241
- {
2242
- 'title': 'default',
2243
- 'orientation': 'horizontal',
2244
- 'insets': {'left': 0, 'top': 25, 'right': 42, 'bottom': 0},
2245
- 'image':
2246
- '@url(optimized/google-nexus-5-horizontal-default-1x.avif) 1x, @url(optimized/google-nexus-5-horizontal-default-2x.avif) 2x',
2247
- },
2248
- {
2249
- 'title': 'navigation bar',
2250
- 'orientation': 'horizontal',
2251
- 'insets': {'left': 0, 'top': 80, 'right': 42, 'bottom': 0},
2252
- 'image':
2253
- '@url(optimized/google-nexus-5-horizontal-navigation-1x.avif) 1x, @url(optimized/google-nexus-5-horizontal-navigation-2x.avif) 2x',
2254
- },
2255
- {
2256
- 'title': 'keyboard',
2257
- 'orientation': 'horizontal',
2258
- 'insets': {'left': 0, 'top': 80, 'right': 42, 'bottom': 202},
2259
- 'image':
2260
- '@url(optimized/google-nexus-5-horizontal-keyboard-1x.avif) 1x, @url(optimized/google-nexus-5-horizontal-keyboard-2x.avif) 2x',
2261
- },
2262
- ],
2263
- },
2264
- {
2265
- 'title': 'Nexus 5X',
2266
- 'type': 'phone',
2267
- 'user-agent':
2268
- 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
2269
- 'user-agent-metadata':
2270
- {'platform': 'Android', 'platformVersion': '8.0.0', 'architecture': '', 'model': 'Nexus 5X', 'mobile': true},
2271
- 'capabilities': ['touch', 'mobile'],
2272
- 'show-by-default': false,
2273
- 'screen': {
2274
- 'device-pixel-ratio': 2.625,
2275
- 'vertical': {
2276
- 'outline': {
2277
- 'image': '@url(optimized/Nexus5X-portrait.avif)',
2278
- 'insets': {'left': 18, 'top': 88, 'right': 22, 'bottom': 98},
2279
- },
2280
- 'width': 412,
2281
- 'height': 732,
2282
- },
2283
- 'horizontal': {
2284
- 'outline': {
2285
- 'image': '@url(optimized/Nexus5X-landscape.avif)',
2286
- 'insets': {'left': 88, 'top': 21, 'right': 98, 'bottom': 19},
2287
- },
2288
- 'width': 732,
2289
- 'height': 412,
2290
- },
2291
- },
2292
- 'modes': [
2293
- {
2294
- 'title': 'default',
2295
- 'orientation': 'vertical',
2296
- 'insets': {'left': 0, 'top': 24, 'right': 0, 'bottom': 48},
2297
- 'image':
2298
- '@url(optimized/google-nexus-5x-vertical-default-1x.avif) 1x, @url(optimized/google-nexus-5x-vertical-default-2x.avif) 2x',
2299
- },
2300
- {
2301
- 'title': 'navigation bar',
2302
- 'orientation': 'vertical',
2303
- 'insets': {'left': 0, 'top': 80, 'right': 0, 'bottom': 48},
2304
- 'image':
2305
- '@url(optimized/google-nexus-5x-vertical-navigation-1x.avif) 1x, @url(optimized/google-nexus-5x-vertical-navigation-2x.avif) 2x',
2306
- },
2307
- {
2308
- 'title': 'keyboard',
2309
- 'orientation': 'vertical',
2310
- 'insets': {'left': 0, 'top': 80, 'right': 0, 'bottom': 342},
2311
- 'image':
2312
- '@url(optimized/google-nexus-5x-vertical-keyboard-1x.avif) 1x, @url(optimized/google-nexus-5x-vertical-keyboard-2x.avif) 2x',
2313
- },
2314
- {
2315
- 'title': 'default',
2316
- 'orientation': 'horizontal',
2317
- 'insets': {'left': 0, 'top': 24, 'right': 48, 'bottom': 0},
2318
- 'image':
2319
- '@url(optimized/google-nexus-5x-horizontal-default-1x.avif) 1x, @url(optimized/google-nexus-5x-horizontal-default-2x.avif) 2x',
2320
- },
2321
- {
2322
- 'title': 'navigation bar',
2323
- 'orientation': 'horizontal',
2324
- 'insets': {'left': 0, 'top': 80, 'right': 48, 'bottom': 0},
2325
- 'image':
2326
- '@url(optimized/google-nexus-5x-horizontal-navigation-1x.avif) 1x, @url(optimized/google-nexus-5x-horizontal-navigation-2x.avif) 2x',
2327
- },
2328
- {
2329
- 'title': 'keyboard',
2330
- 'orientation': 'horizontal',
2331
- 'insets': {'left': 0, 'top': 80, 'right': 48, 'bottom': 222},
2332
- 'image':
2333
- '@url(optimized/google-nexus-5x-horizontal-keyboard-1x.avif) 1x, @url(optimized/google-nexus-5x-horizontal-keyboard-2x.avif) 2x',
2334
- },
2335
- ],
2336
- },
2337
- {
2338
- 'show-by-default': false,
2339
- 'title': 'Nexus 6',
2340
- 'screen': {
2341
- 'horizontal': {'width': 732, 'height': 412},
2342
- 'device-pixel-ratio': 3.5,
2343
- 'vertical': {'width': 412, 'height': 732},
2344
- },
2345
- 'capabilities': ['touch', 'mobile'],
2346
- 'user-agent':
2347
- 'Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
2348
- 'user-agent-metadata':
2349
- {'platform': 'Android', 'platformVersion': '7.1.1', 'architecture': '', 'model': 'Nexus 6', 'mobile': true},
2350
- 'type': 'phone',
2351
- },
2352
- {
2353
- 'show-by-default': false,
2354
- 'title': 'Nexus 6P',
2355
- 'screen': {
2356
- 'horizontal': {
2357
- 'outline': {
2358
- 'image': '@url(optimized/Nexus6P-landscape.avif)',
2359
- 'insets': {'left': 94, 'top': 17, 'right': 88, 'bottom': 17},
2360
- },
2361
- 'width': 732,
2362
- 'height': 412,
2363
- },
2364
- 'device-pixel-ratio': 3.5,
2365
- 'vertical': {
2366
- 'outline': {
2367
- 'image': '@url(optimized/Nexus6P-portrait.avif)',
2368
- 'insets': {'left': 16, 'top': 94, 'right': 16, 'bottom': 88},
2369
- },
2370
- 'width': 412,
2371
- 'height': 732,
2372
- },
2373
- },
2374
- 'capabilities': ['touch', 'mobile'],
2375
- 'user-agent':
2376
- 'Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
2377
- 'user-agent-metadata':
2378
- {'platform': 'Android', 'platformVersion': '8.0.0', 'architecture': '', 'model': 'Nexus 6P', 'mobile': true},
2379
- 'type': 'phone',
2380
- },
2381
- {
2382
- 'order': 120,
2383
- 'show-by-default': false,
2384
- 'title': 'Pixel 2',
2385
- 'screen': {
2386
- 'horizontal': {'width': 731, 'height': 411},
2387
- 'device-pixel-ratio': 2.625,
2388
- 'vertical': {'width': 411, 'height': 731},
2389
- },
2390
- 'capabilities': ['touch', 'mobile'],
2391
- 'user-agent':
2392
- 'Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
2393
- 'user-agent-metadata':
2394
- {'platform': 'Android', 'platformVersion': '8.0', 'architecture': '', 'model': 'Pixel 2', 'mobile': true},
2395
- 'type': 'phone',
2396
- },
2397
- {
2398
- 'order': 121,
2399
- 'show-by-default': false,
2400
- 'title': 'Pixel 2 XL',
2401
- 'screen': {
2402
- 'horizontal': {'width': 823, 'height': 411},
2403
- 'device-pixel-ratio': 3.5,
2404
- 'vertical': {'width': 411, 'height': 823},
2405
- },
2406
- 'capabilities': ['touch', 'mobile'],
2407
- 'user-agent':
2408
- 'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
2409
- 'user-agent-metadata':
2410
- {'platform': 'Android', 'platformVersion': '8.0.0', 'architecture': '', 'model': 'Pixel 2 XL', 'mobile': true},
2411
- 'type': 'phone',
2412
- },
2413
- {
2414
- 'show-by-default': false,
2415
- 'title': 'Pixel 3',
2416
- 'screen': {
2417
- 'horizontal': {'width': 786, 'height': 393},
2418
- 'device-pixel-ratio': 2.75,
2419
- 'vertical': {'width': 393, 'height': 786},
2420
- },
2421
- 'capabilities': ['touch', 'mobile'],
2422
- 'user-agent':
2423
- 'Mozilla/5.0 (Linux; Android 9; Pixel 3 Build/PQ1A.181105.017.A1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
2424
- 'user-agent-metadata':
2425
- {'platform': 'Android', 'platformVersion': '9', 'architecture': '', 'model': 'Pixel 3', 'mobile': true},
2426
- 'type': 'phone',
2427
- },
2428
- {
2429
- 'show-by-default': false,
2430
- 'title': 'Pixel 4',
2431
- 'screen': {
2432
- 'horizontal': {'width': 745, 'height': 353},
2433
- 'device-pixel-ratio': 3,
2434
- 'vertical': {'width': 353, 'height': 745},
2435
- },
2436
- 'capabilities': ['touch', 'mobile'],
2437
- 'user-agent':
2438
- 'Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
2439
- 'user-agent-metadata':
2440
- {'platform': 'Android', 'platformVersion': '10', 'architecture': '', 'model': 'Pixel 4', 'mobile': true},
2441
- 'type': 'phone',
2442
- },
2443
- {
2444
- 'show-by-default': false,
2445
- 'title': 'LG Optimus L70',
2446
- 'screen': {
2447
- 'horizontal': {'width': 640, 'height': 384},
2448
- 'device-pixel-ratio': 1.25,
2449
- 'vertical': {'width': 384, 'height': 640},
2450
- },
2451
- 'capabilities': ['touch', 'mobile'],
2452
- 'user-agent':
2453
- 'Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/%s Mobile Safari/537.36',
2454
- 'user-agent-metadata':
2455
- {'platform': 'Android', 'platformVersion': '4.4.2', 'architecture': '', 'model': 'LGMS323', 'mobile': true},
2456
- 'type': 'phone',
2457
- },
2458
- {
2459
- 'show-by-default': false,
2460
- 'title': 'Nokia N9',
2461
- 'screen': {
2462
- 'horizontal': {'width': 854, 'height': 480},
2463
- 'device-pixel-ratio': 1,
2464
- 'vertical': {'width': 480, 'height': 854},
2465
- },
2466
- 'capabilities': ['touch', 'mobile'],
2467
- 'user-agent':
2468
- 'Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13',
2469
- 'type': 'phone',
2470
- },
2471
- {
2472
- 'show-by-default': false,
2473
- 'title': 'Nokia Lumia 520',
2474
- 'screen': {
2475
- 'horizontal': {'width': 533, 'height': 320},
2476
- 'device-pixel-ratio': 1.5,
2477
- 'vertical': {'width': 320, 'height': 533},
2478
- },
2479
- 'capabilities': ['touch', 'mobile'],
2480
- 'user-agent':
2481
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)',
2482
- 'type': 'phone',
2483
- },
2484
- {
2485
- 'show-by-default': false,
2486
- 'title': 'Microsoft Lumia 550',
2487
- 'screen': {
2488
- 'horizontal': {'width': 640, 'height': 360},
2489
- 'device-pixel-ratio': 2,
2490
- 'vertical': {'width': 640, 'height': 360},
2491
- },
2492
- 'capabilities': ['touch', 'mobile'],
2493
- 'user-agent':
2494
- 'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36 Edge/14.14263',
2495
- 'user-agent-metadata':
2496
- {'platform': 'Android', 'platformVersion': '4.2.1', 'architecture': '', 'model': 'Lumia 550', 'mobile': true},
2497
- 'type': 'phone',
2498
- },
2499
- {
2500
- 'show-by-default': false,
2501
- 'title': 'Microsoft Lumia 950',
2502
- 'screen': {
2503
- 'horizontal': {'width': 640, 'height': 360},
2504
- 'device-pixel-ratio': 4,
2505
- 'vertical': {'width': 360, 'height': 640},
2506
- },
2507
- 'capabilities': ['touch', 'mobile'],
2508
- 'user-agent':
2509
- 'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36 Edge/14.14263',
2510
- 'user-agent-metadata':
2511
- {'platform': 'Android', 'platformVersion': '4.2.1', 'architecture': '', 'model': 'Lumia 950', 'mobile': true},
2512
- 'type': 'phone',
2513
- },
2514
- {
2515
- 'show-by-default': false,
2516
- 'title': 'Galaxy S III',
2517
- 'screen': {
2518
- 'horizontal': {'width': 640, 'height': 360},
2519
- 'device-pixel-ratio': 2,
2520
- 'vertical': {'width': 360, 'height': 640},
2521
- },
2522
- 'capabilities': ['touch', 'mobile'],
2523
- 'user-agent':
2524
- 'Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
2525
- 'user-agent-metadata':
2526
- {'platform': 'Android', 'platformVersion': '4.0', 'architecture': '', 'model': 'GT-I9300', 'mobile': true},
2527
- 'type': 'phone',
2528
- },
2529
- {
2530
- 'order': 110,
2531
- 'show-by-default': false,
2532
- 'title': 'Galaxy S5',
2533
- 'screen': {
2534
- 'horizontal': {'width': 640, 'height': 360},
2535
- 'device-pixel-ratio': 3,
2536
- 'vertical': {'width': 360, 'height': 640},
2537
- },
2538
- 'capabilities': ['touch', 'mobile'],
2539
- 'user-agent':
2540
- 'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
2541
- 'user-agent-metadata':
2542
- {'platform': 'Android', 'platformVersion': '5.0', 'architecture': '', 'model': 'SM-G900P', 'mobile': true},
2543
- 'type': 'phone',
2544
- },
2545
- {
2546
- 'show-by-default': false,
2547
- 'title': 'Galaxy S8',
2548
- 'screen': {
2549
- 'horizontal': {'width': 740, 'height': 360},
2550
- 'device-pixel-ratio': 3,
2551
- 'vertical': {'width': 360, 'height': 740},
2552
- },
2553
- 'capabilities': ['touch', 'mobile'],
2554
- 'user-agent':
2555
- 'Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
2556
- 'user-agent-metadata':
2557
- {'platform': 'Android', 'platformVersion': '7.0', 'architecture': '', 'model': 'SM-G950U', 'mobile': true},
2558
- 'type': 'phone',
2559
- },
2560
- {
2561
- 'show-by-default': false,
2562
- 'title': 'Galaxy S9+',
2563
- 'screen': {
2564
- 'horizontal': {'width': 658, 'height': 320},
2565
- 'device-pixel-ratio': 4.5,
2566
- 'vertical': {'width': 320, 'height': 658},
2567
- },
2568
- 'capabilities': ['touch', 'mobile'],
2569
- 'user-agent':
2570
- 'Mozilla/5.0 (Linux; Android 8.0.0; SM-G965U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36',
2571
- 'user-agent-metadata':
2572
- {'platform': 'Android', 'platformVersion': '8.0.0', 'architecture': '', 'model': 'SM-G965U', 'mobile': true},
2573
- 'type': 'phone',
2574
- },
2575
- {
2576
- 'show-by-default': false,
2577
- 'title': 'Galaxy Tab S4',
2578
- 'screen': {
2579
- 'horizontal': {'width': 1138, 'height': 712},
2580
- 'device-pixel-ratio': 2.25,
2581
- 'vertical': {'width': 712, 'height': 1138},
2582
- },
2583
- 'capabilities': ['touch', 'mobile'],
2584
- 'user-agent':
2585
- 'Mozilla/5.0 (Linux; Android 8.1.0; SM-T837A) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36',
2586
- 'user-agent-metadata':
2587
- {'platform': 'Android', 'platformVersion': '8.1.0', 'architecture': '', 'model': 'SM-T837A', 'mobile': false},
2588
- 'type': 'phone',
2589
- },
2590
- {
2591
- 'order': 1,
2592
- 'show-by-default': false,
2593
- 'title': 'JioPhone 2',
2594
- 'screen': {
2595
- 'horizontal': {'width': 320, 'height': 240},
2596
- 'device-pixel-ratio': 1,
2597
- 'vertical': {'width': 240, 'height': 320},
2598
- },
2599
- 'capabilities': ['touch', 'mobile'],
2600
- 'user-agent':
2601
- 'Mozilla/5.0 (Mobile; LYF/F300B/LYF-F300B-001-01-15-130718-i;Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.5',
2602
- 'user-agent-metadata': {
2603
- 'platform': 'Android',
2604
- 'platformVersion': '',
2605
- 'architecture': '',
2606
- 'model': 'LYF/F300B/LYF-F300B-001-01-15-130718-i',
2607
- 'mobile': true,
2608
- },
2609
- 'type': 'phone',
2610
- },
2611
- {
2612
- 'show-by-default': false,
2613
- 'title': 'Kindle Fire HDX',
2614
- 'screen': {
2615
- 'horizontal': {'width': 1280, 'height': 800},
2616
- 'device-pixel-ratio': 2,
2617
- 'vertical': {'width': 800, 'height': 1280},
2618
- },
2619
- 'capabilities': ['touch', 'mobile'],
2620
- 'user-agent':
2621
- 'Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true',
2622
- 'type': 'tablet',
2623
- },
2624
- {
2625
- 'order': 140,
2626
- 'show-by-default': false,
2627
- 'title': 'iPad',
2628
- 'screen': {
2629
- 'horizontal': {
2630
- 'outline': {
2631
- 'image': '@url(optimized/iPad-landscape.avif)',
2632
- 'insets': {'left': 112, 'top': 56, 'right': 116, 'bottom': 52},
2633
- },
2634
- 'width': 1024,
2635
- 'height': 768,
2636
- },
2637
- 'device-pixel-ratio': 2,
2638
- 'vertical': {
2639
- 'outline': {
2640
- 'image': '@url(optimized/iPad-portrait.avif)',
2641
- 'insets': {'left': 52, 'top': 114, 'right': 55, 'bottom': 114},
2642
- },
2643
- 'width': 768,
2644
- 'height': 1024,
2645
- },
2646
- },
2647
- 'capabilities': ['touch', 'mobile'],
2648
- 'user-agent':
2649
- 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
2650
- 'user-agent-metadata':
2651
- {'platform': 'iOS', 'platformVersion': '11.0', 'architecture': '', 'model': 'iPad', 'mobile': true},
2652
- 'type': 'tablet',
2653
- },
2654
- {
2655
- 'order': 141,
2656
- 'show-by-default': false,
2657
- 'title': 'iPad Pro',
2658
- 'screen': {
2659
- 'horizontal': {'width': 1366, 'height': 1024},
2660
- 'device-pixel-ratio': 2,
2661
- 'vertical': {'width': 1024, 'height': 1366},
2662
- },
2663
- 'capabilities': ['touch', 'mobile'],
2664
- 'user-agent':
2665
- 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
2666
- 'user-agent-metadata':
2667
- {'platform': 'iOS', 'platformVersion': '11.0', 'architecture': '', 'model': 'iPad', 'mobile': true},
2668
- 'type': 'tablet',
2669
- },
2670
- {
2671
- 'show-by-default': false,
2672
- 'title': 'Blackberry PlayBook',
2673
- 'screen': {
2674
- 'horizontal': {'width': 1024, 'height': 600},
2675
- 'device-pixel-ratio': 1,
2676
- 'vertical': {'width': 600, 'height': 1024},
2677
- },
2678
- 'capabilities': ['touch', 'mobile'],
2679
- 'user-agent':
2680
- 'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+',
2681
- 'type': 'tablet',
2682
- },
2683
- {
2684
- 'show-by-default': false,
2685
- 'title': 'Nexus 10',
2686
- 'screen': {
2687
- 'horizontal': {'width': 1280, 'height': 800},
2688
- 'device-pixel-ratio': 2,
2689
- 'vertical': {'width': 800, 'height': 1280},
2690
- },
2691
- 'capabilities': ['touch', 'mobile'],
2692
- 'user-agent':
2693
- 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36',
2694
- 'user-agent-metadata':
2695
- {'platform': 'Android', 'platformVersion': '6.0.1', 'architecture': '', 'model': 'Nexus 10', 'mobile': false},
2696
- 'type': 'tablet',
2697
- },
2698
- {
2699
- 'show-by-default': false,
2700
- 'title': 'Nexus 7',
2701
- 'screen': {
2702
- 'horizontal': {'width': 960, 'height': 600},
2703
- 'device-pixel-ratio': 2,
2704
- 'vertical': {'width': 600, 'height': 960},
2705
- },
2706
- 'capabilities': ['touch', 'mobile'],
2707
- 'user-agent':
2708
- 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36',
2709
- 'user-agent-metadata':
2710
- {'platform': 'Android', 'platformVersion': '6.0.1', 'architecture': '', 'model': 'Nexus 7', 'mobile': false},
2711
- 'type': 'tablet',
2712
- },
2713
- {
2714
- 'show-by-default': false,
2715
- 'title': 'Galaxy Note 3',
2716
- 'screen': {
2717
- 'horizontal': {'width': 640, 'height': 360},
2718
- 'device-pixel-ratio': 3,
2719
- 'vertical': {'width': 360, 'height': 640},
2720
- },
2721
- 'capabilities': ['touch', 'mobile'],
2722
- 'user-agent':
2723
- 'Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
2724
- 'user-agent-metadata':
2725
- {'platform': 'Android', 'platformVersion': '4.3', 'architecture': '', 'model': 'SM-N900T', 'mobile': true},
2726
- 'type': 'phone',
2727
- },
2728
- {
2729
- 'show-by-default': false,
2730
- 'title': 'Galaxy Note II',
2731
- 'screen': {
2732
- 'horizontal': {'width': 640, 'height': 360},
2733
- 'device-pixel-ratio': 2,
2734
- 'vertical': {'width': 360, 'height': 640},
2735
- },
2736
- 'capabilities': ['touch', 'mobile'],
2737
- 'user-agent':
2738
- 'Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
2739
- 'user-agent-metadata':
2740
- {'platform': 'Android', 'platformVersion': '4.1', 'architecture': '', 'model': 'GT-N7100', 'mobile': true},
2185
+ 'Mozilla/5.0 (Mobile; LYF/F300B/LYF-F300B-001-01-15-130718-i;Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.5',
2186
+ 'user-agent-metadata': {
2187
+ 'platform': 'Android',
2188
+ 'platformVersion': '',
2189
+ 'architecture': '',
2190
+ 'model': 'LYF/F300B/LYF-F300B-001-01-15-130718-i',
2191
+ 'mobile': true,
2192
+ },
2741
2193
  'type': 'phone',
2742
2194
  },
2195
+
2743
2196
  {
2744
2197
  'show-by-default': false,
2745
2198
  /* DEVICE-LIST-IF-JS */