chrome-devtools-frontend 1.0.1669021 → 1.0.1672388

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 (208) 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 +2 -2
  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.d.ts +949 -0
  15. package/front_end/core/root/Runtime.ts +21 -133
  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/protocol-mapping.d.ts +0 -42
  32. package/front_end/generated/protocol-proxy-api.d.ts +0 -38
  33. package/front_end/generated/protocol.ts +9 -169
  34. package/front_end/models/ai_assistance/AiAgent2.ts +11 -3
  35. package/front_end/models/ai_assistance/AiConversation.ts +1 -0
  36. package/front_end/models/ai_assistance/AiHistoryStorage.ts +8 -5
  37. package/front_end/models/ai_assistance/AiSetting.ts +108 -0
  38. package/front_end/models/ai_assistance/AiUtils.ts +47 -0
  39. package/front_end/models/ai_assistance/ChangeManager.ts +1 -0
  40. package/front_end/models/ai_assistance/ExtensionScope.ts +3 -12
  41. package/front_end/models/ai_assistance/agents/AiAgent.ts +11 -18
  42. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +3 -0
  43. package/front_end/models/ai_assistance/agents/ExecuteJavascript.ts +42 -17
  44. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +3 -2
  45. package/front_end/models/ai_assistance/agents/StorageAgent.ts +253 -155
  46. package/front_end/models/ai_assistance/agents/StylingAgent.snapshot.txt +2 -2
  47. package/front_end/models/ai_assistance/ai_assistance.ts +4 -0
  48. package/front_end/models/ai_assistance/contexts/PerformanceTraceContext.ts +12 -6
  49. package/front_end/models/ai_assistance/data_formatters/FileFormatter.ts +3 -1
  50. package/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.ts +1 -0
  51. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +1 -0
  52. package/front_end/models/ai_assistance/injected.ts +1 -0
  53. package/front_end/models/ai_assistance/performance/AICallTree.ts +1 -0
  54. package/front_end/models/ai_assistance/skills/Skill.ts +1 -1
  55. package/front_end/models/ai_assistance/skills/SkillRegistry.ts +2 -0
  56. package/front_end/models/ai_assistance/skills/performance.md +10 -0
  57. package/front_end/models/ai_assistance/tools/ExecuteJavaScript.ts +52 -5
  58. package/front_end/models/ai_assistance/tools/GetElementAccessibilityDetails.ts +4 -4
  59. package/front_end/models/ai_assistance/tools/GetLighthouseAudits.ts +4 -4
  60. package/front_end/models/ai_assistance/tools/GetNetworkRequestDetails.ts +5 -4
  61. package/front_end/models/ai_assistance/tools/GetStyles.ts +5 -4
  62. package/front_end/models/ai_assistance/tools/ListNetworkRequests.ts +5 -4
  63. package/front_end/models/ai_assistance/tools/README.md +1 -1
  64. package/front_end/models/ai_assistance/tools/RecordPerformanceTrace.ts +63 -0
  65. package/front_end/models/ai_assistance/tools/ResolveDevtoolsNodePath.ts +5 -5
  66. package/front_end/models/ai_assistance/tools/Tool.ts +118 -24
  67. package/front_end/models/ai_assistance/tools/ToolRegistry.ts +2 -0
  68. package/front_end/models/badges/UserBadges.ts +2 -0
  69. package/front_end/models/bindings/NetworkProject.ts +5 -0
  70. package/front_end/models/bindings/ResourceScriptMapping.ts +2 -0
  71. package/front_end/models/bindings/ResourceUtils.ts +3 -0
  72. package/front_end/models/crux-manager/CrUXManager.ts +1 -0
  73. package/front_end/models/emulation/DeviceModeModel.ts +140 -7
  74. package/front_end/models/emulation/EmulatedDevices.ts +246 -793
  75. package/front_end/models/issues_manager/IssuesManager.ts +10 -2
  76. package/front_end/models/live-metrics/LiveMetrics.ts +41 -9
  77. package/front_end/models/logs/LogManager.ts +8 -5
  78. package/front_end/models/logs/NetworkLog.ts +1 -0
  79. package/front_end/models/persistence/IsolatedFileSystemManager.ts +21 -3
  80. package/front_end/models/persistence/NetworkPersistenceManager.ts +6 -0
  81. package/front_end/models/project_settings/ProjectSettingsModel.ts +8 -12
  82. package/front_end/models/trace_source_maps_resolver/SourceMapsResolver.ts +3 -1
  83. package/front_end/models/workspace/IgnoreListManager.ts +2 -0
  84. package/front_end/models/workspace/UISourceCode.ts +2 -0
  85. package/front_end/models/workspace_diff/WorkspaceDiff.ts +4 -0
  86. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +22 -22
  87. package/front_end/panels/ai_assistance/ai_assistance-meta.ts +0 -7
  88. package/front_end/panels/ai_assistance/components/ChatInput.ts +4 -0
  89. package/front_end/panels/ai_assistance/components/ChatMessage.ts +79 -34
  90. package/front_end/panels/ai_assistance/components/WalkthroughView.ts +1 -2
  91. package/front_end/panels/ai_assistance/components/walkthroughView.css +1 -1
  92. package/front_end/panels/application/ApplicationPanelSidebar.ts +9 -106
  93. package/front_end/panels/application/ApplicationPanelTreeElement.ts +1 -1
  94. package/front_end/panels/application/application.ts +0 -10
  95. package/front_end/panels/application/components/components.ts +0 -4
  96. package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +0 -5
  97. package/front_end/panels/browser_debugger/EventListenerBreakpointsSidebarPane.ts +6 -12
  98. package/front_end/panels/browser_debugger/browser_debugger-meta.ts +5 -3
  99. package/front_end/panels/console/ConsoleFormat.ts +2 -62
  100. package/front_end/panels/console/ConsoleViewMessage.ts +14 -7
  101. package/front_end/panels/emulation/AdvancedApp.ts +1 -2
  102. package/front_end/panels/emulation/DeviceModeToolbar.ts +83 -69
  103. package/front_end/panels/emulation/DeviceModeView.ts +4 -134
  104. package/front_end/panels/emulation/DeviceModeWrapper.ts +52 -69
  105. package/front_end/panels/emulation/MediaQueryInspector.ts +2 -2
  106. package/front_end/panels/emulation/emulation-meta.ts +12 -12
  107. package/front_end/panels/issues/IssuesPane.ts +3 -1
  108. package/front_end/panels/lighthouse/LighthouseController.ts +6 -0
  109. package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +17 -21
  110. package/front_end/panels/linear_memory_inspector/components/LinearMemoryNavigator.ts +206 -126
  111. package/front_end/panels/linear_memory_inspector/components/linearMemoryInspector.css +1 -1
  112. package/front_end/panels/mobile_throttling/CalibrationController.ts +1 -1
  113. package/front_end/panels/mobile_throttling/MobileThrottlingSelector.ts +3 -3
  114. package/front_end/panels/mobile_throttling/NetworkPanelIndicator.ts +6 -6
  115. package/front_end/panels/mobile_throttling/NetworkThrottlingSelector.ts +11 -11
  116. package/front_end/panels/mobile_throttling/ThrottlingManager.ts +13 -13
  117. package/front_end/panels/mobile_throttling/ThrottlingPresets.ts +10 -10
  118. package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +28 -28
  119. package/front_end/panels/mobile_throttling/mobile_throttling-meta.ts +6 -6
  120. package/front_end/panels/network/RequestHeadersView.ts +1 -1
  121. package/front_end/panels/network/ResourceChunkView.ts +243 -144
  122. package/front_end/panels/network/ResourceDirectSocketChunkView.ts +52 -29
  123. package/front_end/panels/network/ResourceWebSocketFrameView.ts +21 -35
  124. package/front_end/panels/network/resourceChunkView.css +41 -36
  125. package/front_end/panels/profiler/HeapDetachedElementsDataGrid.ts +21 -12
  126. package/front_end/panels/profiler/profiler.ts +4 -0
  127. package/front_end/panels/recorder/RecorderPanel.ts +6 -14
  128. package/front_end/panels/sensors/LocationsSettingsTab.ts +7 -7
  129. package/front_end/panels/settings/AISettingsTab.ts +75 -31
  130. package/front_end/panels/settings/SettingsScreen.ts +8 -13
  131. package/front_end/panels/settings/components/SyncSection.ts +3 -4
  132. package/front_end/panels/settings/emulation/DevicesSettingsTab.ts +200 -18
  133. package/front_end/panels/settings/emulation/devicesSettingsTab.css +18 -0
  134. package/front_end/panels/settings/settings-meta.ts +0 -1
  135. package/front_end/panels/sources/CategorizedBreakpointL10n.ts +0 -2
  136. package/front_end/panels/sources/DebuggerPausedMessage.ts +11 -5
  137. package/front_end/panels/sources/DebuggerPlugin.ts +1 -1
  138. package/front_end/panels/sources/EditingLocationHistoryManager.ts +12 -9
  139. package/front_end/panels/sources/SourcesPanel.ts +19 -17
  140. package/front_end/panels/sources/SourcesView.ts +191 -96
  141. package/front_end/panels/sources/TabbedEditorContainer.ts +3 -4
  142. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +2 -5
  143. package/front_end/panels/timeline/TimelineUIUtils.ts +15 -0
  144. package/front_end/panels/timeline/timeline-meta.ts +3 -5
  145. package/front_end/third_party/chromium/README.chromium +1 -1
  146. package/front_end/third_party/codemirror.next/chunk/angular.js +1 -1
  147. package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
  148. package/front_end/third_party/codemirror.next/chunk/codemirror.js.map +1 -1
  149. package/front_end/third_party/codemirror.next/chunk/cpp.js +1 -1
  150. package/front_end/third_party/codemirror.next/chunk/cpp.js.map +1 -1
  151. package/front_end/third_party/codemirror.next/chunk/java.js +1 -1
  152. package/front_end/third_party/codemirror.next/chunk/java.js.map +1 -1
  153. package/front_end/third_party/codemirror.next/chunk/legacy.js +1 -1
  154. package/front_end/third_party/codemirror.next/chunk/less.js +1 -1
  155. package/front_end/third_party/codemirror.next/chunk/less.js.map +1 -1
  156. package/front_end/third_party/codemirror.next/chunk/markdown.js +1 -1
  157. package/front_end/third_party/codemirror.next/chunk/markdown.js.map +1 -1
  158. package/front_end/third_party/codemirror.next/chunk/php.js +1 -1
  159. package/front_end/third_party/codemirror.next/chunk/php.js.map +1 -1
  160. package/front_end/third_party/codemirror.next/chunk/python.js +1 -1
  161. package/front_end/third_party/codemirror.next/chunk/python.js.map +1 -1
  162. package/front_end/third_party/codemirror.next/chunk/sass.js +1 -1
  163. package/front_end/third_party/codemirror.next/chunk/sass.js.map +1 -1
  164. package/front_end/third_party/codemirror.next/chunk/svelte.js +1 -1
  165. package/front_end/third_party/codemirror.next/chunk/svelte.js.map +1 -1
  166. package/front_end/third_party/codemirror.next/chunk/vue.js +1 -1
  167. package/front_end/third_party/codemirror.next/chunk/wast.js +1 -1
  168. package/front_end/third_party/codemirror.next/chunk/wast.js.map +1 -1
  169. package/front_end/third_party/codemirror.next/chunk/xml.js +1 -1
  170. package/front_end/third_party/codemirror.next/chunk/xml.js.map +1 -1
  171. package/front_end/third_party/codemirror.next/codemirror.next.d.ts +1332 -193
  172. package/front_end/third_party/codemirror.next/codemirror.next.js +1 -1
  173. package/front_end/third_party/codemirror.next/rebuild.sh +1 -1
  174. package/front_end/tsconfig.compatibility.json +2 -1
  175. package/front_end/tsconfig.json +1 -1
  176. package/front_end/ui/components/icon_button/IconButton.ts +1 -1
  177. package/front_end/ui/components/issue_counter/IssueCounter.ts +1 -1
  178. package/front_end/ui/components/settings/SettingCheckbox.ts +4 -7
  179. package/front_end/ui/components/settings/settings.ts +1 -2
  180. package/front_end/ui/legacy/Treeoutline.ts +52 -30
  181. package/front_end/ui/legacy/components/object_ui/CSSStyleSanitizer.ts +74 -0
  182. package/front_end/ui/legacy/components/object_ui/CustomPreviewComponent.ts +6 -1
  183. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +47 -54
  184. package/front_end/ui/legacy/components/object_ui/object_ui.ts +2 -0
  185. package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +5 -27
  186. package/front_end/ui/legacy/components/settings_ui/SettingsUI.ts +10 -12
  187. package/front_end/ui/settings/SettingUIRegistration.ts +0 -8
  188. package/front_end/ui/visual_logging/KnownContextValues.ts +21 -0
  189. package/inspector_overlay/tsconfig.json +8 -2
  190. package/package.json +3 -2
  191. package/.agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py +0 -47
  192. package/front_end/core/sdk/CSSModel.test.api.ts +0 -102
  193. package/front_end/core/sdk/DOMModel.test.api.ts +0 -104
  194. package/front_end/foundation/Universe.test.api.ts +0 -73
  195. package/front_end/panels/application/SharedStorageEventsView.ts +0 -128
  196. package/front_end/panels/application/SharedStorageItemsView.ts +0 -179
  197. package/front_end/panels/application/SharedStorageListTreeElement.ts +0 -65
  198. package/front_end/panels/application/SharedStorageModel.ts +0 -249
  199. package/front_end/panels/application/SharedStorageTreeElement.ts +0 -40
  200. package/front_end/panels/application/components/SharedStorageAccessGrid.ts +0 -191
  201. package/front_end/panels/application/components/SharedStorageMetadataView.ts +0 -133
  202. package/front_end/panels/application/components/sharedStorageAccessGrid.css +0 -29
  203. package/front_end/panels/application/components/sharedStorageMetadataView.css +0 -29
  204. package/front_end/panels/application/sharedStorageEventsView.css +0 -9
  205. package/front_end/panels/network/OriginalResourceChunkView.ts +0 -340
  206. package/front_end/panels/network/originalResourceChunkView.css +0 -49
  207. package/front_end/ui/components/settings/SettingDeprecationWarning.ts +0 -47
  208. package/front_end/ui/components/settings/settingDeprecationWarning.css +0 -14
@@ -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 */