Skip to main content

browser_protocol/dom/
mod.rs

1//! This domain exposes DOM read/write operations. Each DOM Node is represented with its mirror object
2//! that has an 'id'. This 'id' can be used to get additional information on the Node, resolve it into
3//! the JavaScript object wrapper, etc. It is important that client receives DOM events only for the
4//! nodes that are known to the client. Backend keeps track of the nodes that were sent to the client
5//! and never sends the same node twice. It is client's responsibility to collect information about
6//! the nodes that were sent to the client. Note that 'iframe' owner elements will return
7//! corresponding document elements as their child nodes.
8
9use serde::{Serialize, Deserialize};
10use serde_json::Value as JsonValue;
11
12/// Unique DOM node identifier.
13
14pub type NodeId = i64;
15
16/// Unique DOM node identifier used to reference a node that may not have been pushed to the
17/// front-end.
18
19pub type BackendNodeId = i64;
20
21/// Unique identifier for a CSS stylesheet.
22
23pub type StyleSheetId = String;
24
25/// Backend node with a friendly name.
26
27#[derive(Debug, Clone, Serialize, Deserialize, Default)]
28#[serde(rename_all = "camelCase")]
29pub struct BackendNode {
30    /// 'Node''s nodeType.
31
32    pub nodeType: i64,
33    /// 'Node''s nodeName.
34
35    pub nodeName: String,
36
37    pub backendNodeId: BackendNodeId,
38}
39
40/// Pseudo element type.
41
42#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
43pub enum PseudoType {
44    #[default]
45    FirstLine,
46    FirstLetter,
47    Checkmark,
48    Before,
49    After,
50    ExpandIcon,
51    PickerIcon,
52    InterestHint,
53    Marker,
54    Backdrop,
55    Column,
56    Selection,
57    SearchText,
58    TargetText,
59    SpellingError,
60    GrammarError,
61    Highlight,
62    FirstLineInherited,
63    ScrollMarker,
64    ScrollMarkerGroup,
65    ScrollButton,
66    Scrollbar,
67    ScrollbarThumb,
68    ScrollbarButton,
69    ScrollbarTrack,
70    ScrollbarTrackPiece,
71    ScrollbarCorner,
72    Resizer,
73    InputListButton,
74    ViewTransition,
75    ViewTransitionGroup,
76    ViewTransitionImagePair,
77    ViewTransitionGroupChildren,
78    ViewTransitionOld,
79    ViewTransitionNew,
80    Placeholder,
81    FileSelectorButton,
82    DetailsContent,
83    Picker,
84    PermissionIcon,
85    OverscrollAreaParent,
86}
87
88/// Shadow root type.
89
90#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
91pub enum ShadowRootType {
92    #[default]
93    UserAgent,
94    Open,
95    Closed,
96}
97
98/// Document compatibility mode.
99
100#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
101pub enum CompatibilityMode {
102    #[default]
103    QuirksMode,
104    LimitedQuirksMode,
105    NoQuirksMode,
106}
107
108/// ContainerSelector physical axes
109
110#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
111pub enum PhysicalAxes {
112    #[default]
113    Horizontal,
114    Vertical,
115    Both,
116}
117
118/// ContainerSelector logical axes
119
120#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
121pub enum LogicalAxes {
122    #[default]
123    Inline,
124    Block,
125    Both,
126}
127
128/// Physical scroll orientation
129
130#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
131pub enum ScrollOrientation {
132    #[default]
133    Horizontal,
134    Vertical,
135}
136
137/// DOM interaction is implemented in terms of mirror objects that represent the actual DOM nodes.
138/// DOMNode is a base node mirror type.
139
140#[derive(Debug, Clone, Serialize, Deserialize, Default)]
141#[serde(rename_all = "camelCase")]
142pub struct Node {
143    /// Node identifier that is passed into the rest of the DOM messages as the 'nodeId'. Backend
144    /// will only push node with given 'id' once. It is aware of all requested nodes and will only
145    /// fire DOM events for nodes known to the client.
146
147    pub nodeId: NodeId,
148    /// The id of the parent node if any.
149
150    #[serde(skip_serializing_if = "Option::is_none")]
151    pub parentId: Option<NodeId>,
152    /// The BackendNodeId for this node.
153
154    pub backendNodeId: BackendNodeId,
155    /// 'Node''s nodeType.
156
157    pub nodeType: i64,
158    /// 'Node''s nodeName.
159
160    pub nodeName: String,
161    /// 'Node''s localName.
162
163    pub localName: String,
164    /// 'Node''s nodeValue.
165
166    pub nodeValue: String,
167    /// Child count for 'Container' nodes.
168
169    #[serde(skip_serializing_if = "Option::is_none")]
170    pub childNodeCount: Option<u64>,
171    /// Child nodes of this node when requested with children.
172
173    #[serde(skip_serializing_if = "Option::is_none")]
174    pub children: Option<Vec<Node>>,
175    /// Attributes of the 'Element' node in the form of flat array '\[name1, value1, name2, value2\]'.
176
177    #[serde(skip_serializing_if = "Option::is_none")]
178    pub attributes: Option<Vec<String>>,
179    /// Document URL that 'Document' or 'FrameOwner' node points to.
180
181    #[serde(skip_serializing_if = "Option::is_none")]
182    pub documentURL: Option<String>,
183    /// Base URL that 'Document' or 'FrameOwner' node uses for URL completion.
184
185    #[serde(skip_serializing_if = "Option::is_none")]
186    pub baseURL: Option<String>,
187    /// 'DocumentType''s publicId.
188
189    #[serde(skip_serializing_if = "Option::is_none")]
190    pub publicId: Option<String>,
191    /// 'DocumentType''s systemId.
192
193    #[serde(skip_serializing_if = "Option::is_none")]
194    pub systemId: Option<String>,
195    /// 'DocumentType''s internalSubset.
196
197    #[serde(skip_serializing_if = "Option::is_none")]
198    pub internalSubset: Option<String>,
199    /// 'Document''s XML version in case of XML documents.
200
201    #[serde(skip_serializing_if = "Option::is_none")]
202    pub xmlVersion: Option<String>,
203    /// 'Attr''s name.
204
205    #[serde(skip_serializing_if = "Option::is_none")]
206    pub name: Option<String>,
207    /// 'Attr''s value.
208
209    #[serde(skip_serializing_if = "Option::is_none")]
210    pub value: Option<String>,
211    /// Pseudo element type for this node.
212
213    #[serde(skip_serializing_if = "Option::is_none")]
214    pub pseudoType: Option<PseudoType>,
215    /// Pseudo element identifier for this node. Only present if there is a
216    /// valid pseudoType.
217
218    #[serde(skip_serializing_if = "Option::is_none")]
219    pub pseudoIdentifier: Option<String>,
220    /// Shadow root type.
221
222    #[serde(skip_serializing_if = "Option::is_none")]
223    pub shadowRootType: Option<ShadowRootType>,
224    /// Frame ID for frame owner elements.
225
226    #[serde(skip_serializing_if = "Option::is_none")]
227    pub frameId: Option<crate::page::FrameId>,
228    /// Content document for frame owner elements.
229
230    #[serde(skip_serializing_if = "Option::is_none")]
231    pub contentDocument: Option<Box<Node>>,
232    /// Shadow root list for given element host.
233
234    #[serde(skip_serializing_if = "Option::is_none")]
235    pub shadowRoots: Option<Vec<Node>>,
236    /// Content document fragment for template elements.
237
238    #[serde(skip_serializing_if = "Option::is_none")]
239    pub templateContent: Option<Box<Node>>,
240    /// Pseudo elements associated with this node.
241
242    #[serde(skip_serializing_if = "Option::is_none")]
243    pub pseudoElements: Option<Vec<Node>>,
244    /// Deprecated, as the HTML Imports API has been removed (crbug.com/937746).
245    /// This property used to return the imported document for the HTMLImport links.
246    /// The property is always undefined now.
247
248    #[serde(skip_serializing_if = "Option::is_none")]
249    pub importedDocument: Option<Box<Node>>,
250    /// Distributed nodes for given insertion point.
251
252    #[serde(skip_serializing_if = "Option::is_none")]
253    pub distributedNodes: Option<Vec<BackendNode>>,
254    /// Whether the node is SVG.
255
256    #[serde(skip_serializing_if = "Option::is_none")]
257    pub isSVG: Option<bool>,
258
259    #[serde(skip_serializing_if = "Option::is_none")]
260    pub compatibilityMode: Option<CompatibilityMode>,
261
262    #[serde(skip_serializing_if = "Option::is_none")]
263    pub assignedSlot: Option<BackendNode>,
264
265    #[serde(skip_serializing_if = "Option::is_none")]
266    pub isScrollable: Option<bool>,
267
268    #[serde(skip_serializing_if = "Option::is_none")]
269    pub affectedByStartingStyles: Option<bool>,
270
271    #[serde(skip_serializing_if = "Option::is_none")]
272    pub adoptedStyleSheets: Option<Vec<StyleSheetId>>,
273
274    #[serde(skip_serializing_if = "Option::is_none")]
275    pub adProvenance: Option<crate::network::AdProvenance>,
276}
277
278/// A structure to hold the top-level node of a detached tree and an array of its retained descendants.
279
280#[derive(Debug, Clone, Serialize, Deserialize, Default)]
281#[serde(rename_all = "camelCase")]
282pub struct DetachedElementInfo {
283
284    pub treeNode: Node,
285
286    pub retainedNodeIds: Vec<NodeId>,
287}
288
289/// A structure holding an RGBA color.
290
291#[derive(Debug, Clone, Serialize, Deserialize, Default)]
292#[serde(rename_all = "camelCase")]
293pub struct RGBA {
294    /// The red component, in the \[0-255\] range.
295
296    pub r: i64,
297    /// The green component, in the \[0-255\] range.
298
299    pub g: i64,
300    /// The blue component, in the \[0-255\] range.
301
302    pub b: i64,
303    /// The alpha component, in the \[0-1\] range (default: 1).
304
305    #[serde(skip_serializing_if = "Option::is_none")]
306    pub a: Option<f64>,
307}
308
309/// An array of quad vertices, x immediately followed by y for each point, points clock-wise.
310
311pub type Quad = Vec<f64>;
312
313/// Box model.
314
315#[derive(Debug, Clone, Serialize, Deserialize, Default)]
316#[serde(rename_all = "camelCase")]
317pub struct BoxModel {
318    /// Content box
319
320    pub content: Quad,
321    /// Padding box
322
323    pub padding: Quad,
324    /// Border box
325
326    pub border: Quad,
327    /// Margin box
328
329    pub margin: Quad,
330    /// Node width
331
332    pub width: u64,
333    /// Node height
334
335    pub height: i64,
336    /// Shape outside coordinates
337
338    #[serde(skip_serializing_if = "Option::is_none")]
339    pub shapeOutside: Option<ShapeOutsideInfo>,
340}
341
342/// CSS Shape Outside details.
343
344#[derive(Debug, Clone, Serialize, Deserialize, Default)]
345#[serde(rename_all = "camelCase")]
346pub struct ShapeOutsideInfo {
347    /// Shape bounds
348
349    pub bounds: Quad,
350    /// Shape coordinate details
351
352    pub shape: Vec<JsonValue>,
353    /// Margin shape bounds
354
355    pub marginShape: Vec<JsonValue>,
356}
357
358/// Rectangle.
359
360#[derive(Debug, Clone, Serialize, Deserialize, Default)]
361#[serde(rename_all = "camelCase")]
362pub struct Rect {
363    /// X coordinate
364
365    pub x: f64,
366    /// Y coordinate
367
368    pub y: f64,
369    /// Rectangle width
370
371    pub width: f64,
372    /// Rectangle height
373
374    pub height: f64,
375}
376
377
378#[derive(Debug, Clone, Serialize, Deserialize, Default)]
379#[serde(rename_all = "camelCase")]
380pub struct CSSComputedStyleProperty {
381    /// Computed style property name.
382
383    pub name: String,
384    /// Computed style property value.
385
386    pub value: String,
387}
388
389/// Collects class names for the node with given id and all of it's child nodes.
390
391#[derive(Debug, Clone, Serialize, Deserialize, Default)]
392#[serde(rename_all = "camelCase")]
393pub struct CollectClassNamesFromSubtreeParams {
394    /// Id of the node to collect class names.
395
396    pub nodeId: NodeId,
397}
398
399/// Collects class names for the node with given id and all of it's child nodes.
400
401#[derive(Debug, Clone, Serialize, Deserialize, Default)]
402#[serde(rename_all = "camelCase")]
403pub struct CollectClassNamesFromSubtreeReturns {
404    /// Class name list.
405
406    pub classNames: Vec<String>,
407}
408
409/// Creates a deep copy of the specified node and places it into the target container before the
410/// given anchor.
411
412#[derive(Debug, Clone, Serialize, Deserialize, Default)]
413#[serde(rename_all = "camelCase")]
414pub struct CopyToParams {
415    /// Id of the node to copy.
416
417    pub nodeId: NodeId,
418    /// Id of the element to drop the copy into.
419
420    pub targetNodeId: NodeId,
421    /// Drop the copy before this node (if absent, the copy becomes the last child of
422    /// 'targetNodeId').
423
424    #[serde(skip_serializing_if = "Option::is_none")]
425    pub insertBeforeNodeId: Option<NodeId>,
426}
427
428/// Creates a deep copy of the specified node and places it into the target container before the
429/// given anchor.
430
431#[derive(Debug, Clone, Serialize, Deserialize, Default)]
432#[serde(rename_all = "camelCase")]
433pub struct CopyToReturns {
434    /// Id of the node clone.
435
436    pub nodeId: NodeId,
437}
438
439/// Describes node given its id, does not require domain to be enabled. Does not start tracking any
440/// objects, can be used for automation.
441
442#[derive(Debug, Clone, Serialize, Deserialize, Default)]
443#[serde(rename_all = "camelCase")]
444pub struct DescribeNodeParams {
445    /// Identifier of the node.
446
447    #[serde(skip_serializing_if = "Option::is_none")]
448    pub nodeId: Option<NodeId>,
449    /// Identifier of the backend node.
450
451    #[serde(skip_serializing_if = "Option::is_none")]
452    pub backendNodeId: Option<BackendNodeId>,
453    /// JavaScript object id of the node wrapper.
454
455    #[serde(skip_serializing_if = "Option::is_none")]
456    pub objectId: Option<crate::runtime::RemoteObjectId>,
457    /// The maximum depth at which children should be retrieved, defaults to 1. Use -1 for the
458    /// entire subtree or provide an integer larger than 0.
459
460    #[serde(skip_serializing_if = "Option::is_none")]
461    pub depth: Option<i64>,
462    /// Whether or not iframes and shadow roots should be traversed when returning the subtree
463    /// (default is false).
464
465    #[serde(skip_serializing_if = "Option::is_none")]
466    pub pierce: Option<bool>,
467}
468
469/// Describes node given its id, does not require domain to be enabled. Does not start tracking any
470/// objects, can be used for automation.
471
472#[derive(Debug, Clone, Serialize, Deserialize, Default)]
473#[serde(rename_all = "camelCase")]
474pub struct DescribeNodeReturns {
475    /// Node description.
476
477    pub node: Node,
478}
479
480/// Scrolls the specified rect of the given node into view if not already visible.
481/// Note: exactly one between nodeId, backendNodeId and objectId should be passed
482/// to identify the node.
483
484#[derive(Debug, Clone, Serialize, Deserialize, Default)]
485#[serde(rename_all = "camelCase")]
486pub struct ScrollIntoViewIfNeededParams {
487    /// Identifier of the node.
488
489    #[serde(skip_serializing_if = "Option::is_none")]
490    pub nodeId: Option<NodeId>,
491    /// Identifier of the backend node.
492
493    #[serde(skip_serializing_if = "Option::is_none")]
494    pub backendNodeId: Option<BackendNodeId>,
495    /// JavaScript object id of the node wrapper.
496
497    #[serde(skip_serializing_if = "Option::is_none")]
498    pub objectId: Option<crate::runtime::RemoteObjectId>,
499    /// The rect to be scrolled into view, relative to the node's border box, in CSS pixels.
500    /// When omitted, center of the node will be used, similar to Element.scrollIntoView.
501
502    #[serde(skip_serializing_if = "Option::is_none")]
503    pub rect: Option<Rect>,
504}
505
506/// Discards search results from the session with the given id. 'getSearchResults' should no longer
507/// be called for that search.
508
509#[derive(Debug, Clone, Serialize, Deserialize, Default)]
510#[serde(rename_all = "camelCase")]
511pub struct DiscardSearchResultsParams {
512    /// Unique search session identifier.
513
514    pub searchId: String,
515}
516
517/// Enables DOM agent for the given page.
518
519#[derive(Debug, Clone, Serialize, Deserialize, Default)]
520#[serde(rename_all = "camelCase")]
521pub struct EnableParams {
522    /// Whether to include whitespaces in the children array of returned Nodes.
523
524    #[serde(skip_serializing_if = "Option::is_none")]
525    pub includeWhitespace: Option<String>,
526}
527
528/// Focuses the given element.
529
530#[derive(Debug, Clone, Serialize, Deserialize, Default)]
531#[serde(rename_all = "camelCase")]
532pub struct FocusParams {
533    /// Identifier of the node.
534
535    #[serde(skip_serializing_if = "Option::is_none")]
536    pub nodeId: Option<NodeId>,
537    /// Identifier of the backend node.
538
539    #[serde(skip_serializing_if = "Option::is_none")]
540    pub backendNodeId: Option<BackendNodeId>,
541    /// JavaScript object id of the node wrapper.
542
543    #[serde(skip_serializing_if = "Option::is_none")]
544    pub objectId: Option<crate::runtime::RemoteObjectId>,
545}
546
547/// Returns attributes for the specified node.
548
549#[derive(Debug, Clone, Serialize, Deserialize, Default)]
550#[serde(rename_all = "camelCase")]
551pub struct GetAttributesParams {
552    /// Id of the node to retrieve attributes for.
553
554    pub nodeId: NodeId,
555}
556
557/// Returns attributes for the specified node.
558
559#[derive(Debug, Clone, Serialize, Deserialize, Default)]
560#[serde(rename_all = "camelCase")]
561pub struct GetAttributesReturns {
562    /// An interleaved array of node attribute names and values.
563
564    pub attributes: Vec<String>,
565}
566
567/// Returns boxes for the given node.
568
569#[derive(Debug, Clone, Serialize, Deserialize, Default)]
570#[serde(rename_all = "camelCase")]
571pub struct GetBoxModelParams {
572    /// Identifier of the node.
573
574    #[serde(skip_serializing_if = "Option::is_none")]
575    pub nodeId: Option<NodeId>,
576    /// Identifier of the backend node.
577
578    #[serde(skip_serializing_if = "Option::is_none")]
579    pub backendNodeId: Option<BackendNodeId>,
580    /// JavaScript object id of the node wrapper.
581
582    #[serde(skip_serializing_if = "Option::is_none")]
583    pub objectId: Option<crate::runtime::RemoteObjectId>,
584}
585
586/// Returns boxes for the given node.
587
588#[derive(Debug, Clone, Serialize, Deserialize, Default)]
589#[serde(rename_all = "camelCase")]
590pub struct GetBoxModelReturns {
591    /// Box model for the node.
592
593    pub model: BoxModel,
594}
595
596/// Returns quads that describe node position on the page. This method
597/// might return multiple quads for inline nodes.
598
599#[derive(Debug, Clone, Serialize, Deserialize, Default)]
600#[serde(rename_all = "camelCase")]
601pub struct GetContentQuadsParams {
602    /// Identifier of the node.
603
604    #[serde(skip_serializing_if = "Option::is_none")]
605    pub nodeId: Option<NodeId>,
606    /// Identifier of the backend node.
607
608    #[serde(skip_serializing_if = "Option::is_none")]
609    pub backendNodeId: Option<BackendNodeId>,
610    /// JavaScript object id of the node wrapper.
611
612    #[serde(skip_serializing_if = "Option::is_none")]
613    pub objectId: Option<crate::runtime::RemoteObjectId>,
614}
615
616/// Returns quads that describe node position on the page. This method
617/// might return multiple quads for inline nodes.
618
619#[derive(Debug, Clone, Serialize, Deserialize, Default)]
620#[serde(rename_all = "camelCase")]
621pub struct GetContentQuadsReturns {
622    /// Quads that describe node layout relative to viewport.
623
624    pub quads: Vec<Quad>,
625}
626
627/// Returns the root DOM node (and optionally the subtree) to the caller.
628/// Implicitly enables the DOM domain events for the current target.
629
630#[derive(Debug, Clone, Serialize, Deserialize, Default)]
631#[serde(rename_all = "camelCase")]
632pub struct GetDocumentParams {
633    /// The maximum depth at which children should be retrieved, defaults to 1. Use -1 for the
634    /// entire subtree or provide an integer larger than 0.
635
636    #[serde(skip_serializing_if = "Option::is_none")]
637    pub depth: Option<i64>,
638    /// Whether or not iframes and shadow roots should be traversed when returning the subtree
639    /// (default is false).
640
641    #[serde(skip_serializing_if = "Option::is_none")]
642    pub pierce: Option<bool>,
643}
644
645/// Returns the root DOM node (and optionally the subtree) to the caller.
646/// Implicitly enables the DOM domain events for the current target.
647
648#[derive(Debug, Clone, Serialize, Deserialize, Default)]
649#[serde(rename_all = "camelCase")]
650pub struct GetDocumentReturns {
651    /// Resulting node.
652
653    pub root: Node,
654}
655
656/// Returns the root DOM node (and optionally the subtree) to the caller.
657/// Deprecated, as it is not designed to work well with the rest of the DOM agent.
658/// Use DOMSnapshot.captureSnapshot instead.
659
660#[derive(Debug, Clone, Serialize, Deserialize, Default)]
661#[serde(rename_all = "camelCase")]
662pub struct GetFlattenedDocumentParams {
663    /// The maximum depth at which children should be retrieved, defaults to 1. Use -1 for the
664    /// entire subtree or provide an integer larger than 0.
665
666    #[serde(skip_serializing_if = "Option::is_none")]
667    pub depth: Option<i64>,
668    /// Whether or not iframes and shadow roots should be traversed when returning the subtree
669    /// (default is false).
670
671    #[serde(skip_serializing_if = "Option::is_none")]
672    pub pierce: Option<bool>,
673}
674
675/// Returns the root DOM node (and optionally the subtree) to the caller.
676/// Deprecated, as it is not designed to work well with the rest of the DOM agent.
677/// Use DOMSnapshot.captureSnapshot instead.
678
679#[derive(Debug, Clone, Serialize, Deserialize, Default)]
680#[serde(rename_all = "camelCase")]
681pub struct GetFlattenedDocumentReturns {
682    /// Resulting node.
683
684    pub nodes: Vec<Node>,
685}
686
687/// Finds nodes with a given computed style in a subtree.
688
689#[derive(Debug, Clone, Serialize, Deserialize, Default)]
690#[serde(rename_all = "camelCase")]
691pub struct GetNodesForSubtreeByStyleParams {
692    /// Node ID pointing to the root of a subtree.
693
694    pub nodeId: NodeId,
695    /// The style to filter nodes by (includes nodes if any of properties matches).
696
697    pub computedStyles: Vec<CSSComputedStyleProperty>,
698    /// Whether or not iframes and shadow roots in the same target should be traversed when returning the
699    /// results (default is false).
700
701    #[serde(skip_serializing_if = "Option::is_none")]
702    pub pierce: Option<bool>,
703}
704
705/// Finds nodes with a given computed style in a subtree.
706
707#[derive(Debug, Clone, Serialize, Deserialize, Default)]
708#[serde(rename_all = "camelCase")]
709pub struct GetNodesForSubtreeByStyleReturns {
710    /// Resulting nodes.
711
712    pub nodeIds: Vec<NodeId>,
713}
714
715/// Returns node id at given location. Depending on whether DOM domain is enabled, nodeId is
716/// either returned or not.
717
718#[derive(Debug, Clone, Serialize, Deserialize, Default)]
719#[serde(rename_all = "camelCase")]
720pub struct GetNodeForLocationParams {
721    /// X coordinate.
722
723    pub x: i32,
724    /// Y coordinate.
725
726    pub y: i32,
727    /// False to skip to the nearest non-UA shadow root ancestor (default: false).
728
729    #[serde(skip_serializing_if = "Option::is_none")]
730    pub includeUserAgentShadowDOM: Option<bool>,
731    /// Whether to ignore pointer-events: none on elements and hit test them.
732
733    #[serde(skip_serializing_if = "Option::is_none")]
734    pub ignorePointerEventsNone: Option<bool>,
735}
736
737/// Returns node id at given location. Depending on whether DOM domain is enabled, nodeId is
738/// either returned or not.
739
740#[derive(Debug, Clone, Serialize, Deserialize, Default)]
741#[serde(rename_all = "camelCase")]
742pub struct GetNodeForLocationReturns {
743    /// Resulting node.
744
745    pub backendNodeId: BackendNodeId,
746    /// Frame this node belongs to.
747
748    pub frameId: crate::page::FrameId,
749    /// Id of the node at given coordinates, only when enabled and requested document.
750
751    #[serde(skip_serializing_if = "Option::is_none")]
752    pub nodeId: Option<NodeId>,
753}
754
755/// Returns node's HTML markup.
756
757#[derive(Debug, Clone, Serialize, Deserialize, Default)]
758#[serde(rename_all = "camelCase")]
759pub struct GetOuterHTMLParams {
760    /// Identifier of the node.
761
762    #[serde(skip_serializing_if = "Option::is_none")]
763    pub nodeId: Option<NodeId>,
764    /// Identifier of the backend node.
765
766    #[serde(skip_serializing_if = "Option::is_none")]
767    pub backendNodeId: Option<BackendNodeId>,
768    /// JavaScript object id of the node wrapper.
769
770    #[serde(skip_serializing_if = "Option::is_none")]
771    pub objectId: Option<crate::runtime::RemoteObjectId>,
772    /// Include all shadow roots. Equals to false if not specified.
773
774    #[serde(skip_serializing_if = "Option::is_none")]
775    pub includeShadowDOM: Option<bool>,
776}
777
778/// Returns node's HTML markup.
779
780#[derive(Debug, Clone, Serialize, Deserialize, Default)]
781#[serde(rename_all = "camelCase")]
782pub struct GetOuterHTMLReturns {
783    /// Outer HTML markup.
784
785    pub outerHTML: String,
786}
787
788/// Returns the id of the nearest ancestor that is a relayout boundary.
789
790#[derive(Debug, Clone, Serialize, Deserialize, Default)]
791#[serde(rename_all = "camelCase")]
792pub struct GetRelayoutBoundaryParams {
793    /// Id of the node.
794
795    pub nodeId: NodeId,
796}
797
798/// Returns the id of the nearest ancestor that is a relayout boundary.
799
800#[derive(Debug, Clone, Serialize, Deserialize, Default)]
801#[serde(rename_all = "camelCase")]
802pub struct GetRelayoutBoundaryReturns {
803    /// Relayout boundary node id for the given node.
804
805    pub nodeId: NodeId,
806}
807
808/// Returns search results from given 'fromIndex' to given 'toIndex' from the search with the given
809/// identifier.
810
811#[derive(Debug, Clone, Serialize, Deserialize, Default)]
812#[serde(rename_all = "camelCase")]
813pub struct GetSearchResultsParams {
814    /// Unique search session identifier.
815
816    pub searchId: String,
817    /// Start index of the search result to be returned.
818
819    pub fromIndex: u64,
820    /// End index of the search result to be returned.
821
822    pub toIndex: u64,
823}
824
825/// Returns search results from given 'fromIndex' to given 'toIndex' from the search with the given
826/// identifier.
827
828#[derive(Debug, Clone, Serialize, Deserialize, Default)]
829#[serde(rename_all = "camelCase")]
830pub struct GetSearchResultsReturns {
831    /// Ids of the search result nodes.
832
833    pub nodeIds: Vec<NodeId>,
834}
835
836/// Moves node into the new container, places it before the given anchor.
837
838#[derive(Debug, Clone, Serialize, Deserialize, Default)]
839#[serde(rename_all = "camelCase")]
840pub struct MoveToParams {
841    /// Id of the node to move.
842
843    pub nodeId: NodeId,
844    /// Id of the element to drop the moved node into.
845
846    pub targetNodeId: NodeId,
847    /// Drop node before this one (if absent, the moved node becomes the last child of
848    /// 'targetNodeId').
849
850    #[serde(skip_serializing_if = "Option::is_none")]
851    pub insertBeforeNodeId: Option<NodeId>,
852}
853
854/// Moves node into the new container, places it before the given anchor.
855
856#[derive(Debug, Clone, Serialize, Deserialize, Default)]
857#[serde(rename_all = "camelCase")]
858pub struct MoveToReturns {
859    /// New id of the moved node.
860
861    pub nodeId: NodeId,
862}
863
864/// Searches for a given string in the DOM tree. Use 'getSearchResults' to access search results or
865/// 'cancelSearch' to end this search session.
866
867#[derive(Debug, Clone, Serialize, Deserialize, Default)]
868#[serde(rename_all = "camelCase")]
869pub struct PerformSearchParams {
870    /// Plain text or query selector or XPath search query.
871
872    pub query: String,
873    /// True to search in user agent shadow DOM.
874
875    #[serde(skip_serializing_if = "Option::is_none")]
876    pub includeUserAgentShadowDOM: Option<bool>,
877}
878
879/// Searches for a given string in the DOM tree. Use 'getSearchResults' to access search results or
880/// 'cancelSearch' to end this search session.
881
882#[derive(Debug, Clone, Serialize, Deserialize, Default)]
883#[serde(rename_all = "camelCase")]
884pub struct PerformSearchReturns {
885    /// Unique search session identifier.
886
887    pub searchId: String,
888    /// Number of search results.
889
890    pub resultCount: u64,
891}
892
893/// Requests that the node is sent to the caller given its path. // FIXME, use XPath
894
895#[derive(Debug, Clone, Serialize, Deserialize, Default)]
896#[serde(rename_all = "camelCase")]
897pub struct PushNodeByPathToFrontendParams {
898    /// Path to node in the proprietary format.
899
900    pub path: String,
901}
902
903/// Requests that the node is sent to the caller given its path. // FIXME, use XPath
904
905#[derive(Debug, Clone, Serialize, Deserialize, Default)]
906#[serde(rename_all = "camelCase")]
907pub struct PushNodeByPathToFrontendReturns {
908    /// Id of the node for given path.
909
910    pub nodeId: NodeId,
911}
912
913/// Requests that a batch of nodes is sent to the caller given their backend node ids.
914
915#[derive(Debug, Clone, Serialize, Deserialize, Default)]
916#[serde(rename_all = "camelCase")]
917pub struct PushNodesByBackendIdsToFrontendParams {
918    /// The array of backend node ids.
919
920    pub backendNodeIds: Vec<BackendNodeId>,
921}
922
923/// Requests that a batch of nodes is sent to the caller given their backend node ids.
924
925#[derive(Debug, Clone, Serialize, Deserialize, Default)]
926#[serde(rename_all = "camelCase")]
927pub struct PushNodesByBackendIdsToFrontendReturns {
928    /// The array of ids of pushed nodes that correspond to the backend ids specified in
929    /// backendNodeIds.
930
931    pub nodeIds: Vec<NodeId>,
932}
933
934/// Executes 'querySelector' on a given node.
935
936#[derive(Debug, Clone, Serialize, Deserialize, Default)]
937#[serde(rename_all = "camelCase")]
938pub struct QuerySelectorParams {
939    /// Id of the node to query upon.
940
941    pub nodeId: NodeId,
942    /// Selector string.
943
944    pub selector: String,
945}
946
947/// Executes 'querySelector' on a given node.
948
949#[derive(Debug, Clone, Serialize, Deserialize, Default)]
950#[serde(rename_all = "camelCase")]
951pub struct QuerySelectorReturns {
952    /// Query selector result.
953
954    pub nodeId: NodeId,
955}
956
957/// Executes 'querySelectorAll' on a given node.
958
959#[derive(Debug, Clone, Serialize, Deserialize, Default)]
960#[serde(rename_all = "camelCase")]
961pub struct QuerySelectorAllParams {
962    /// Id of the node to query upon.
963
964    pub nodeId: NodeId,
965    /// Selector string.
966
967    pub selector: String,
968}
969
970/// Executes 'querySelectorAll' on a given node.
971
972#[derive(Debug, Clone, Serialize, Deserialize, Default)]
973#[serde(rename_all = "camelCase")]
974pub struct QuerySelectorAllReturns {
975    /// Query selector result.
976
977    pub nodeIds: Vec<NodeId>,
978}
979
980/// Returns NodeIds of current top layer elements.
981/// Top layer is rendered closest to the user within a viewport, therefore its elements always
982/// appear on top of all other content.
983
984#[derive(Debug, Clone, Serialize, Deserialize, Default)]
985#[serde(rename_all = "camelCase")]
986pub struct GetTopLayerElementsReturns {
987    /// NodeIds of top layer elements
988
989    pub nodeIds: Vec<NodeId>,
990}
991
992/// Returns the NodeId of the matched element according to certain relations.
993
994#[derive(Debug, Clone, Serialize, Deserialize, Default)]
995#[serde(rename_all = "camelCase")]
996pub struct GetElementByRelationParams {
997    /// Id of the node from which to query the relation.
998
999    pub nodeId: NodeId,
1000    /// Type of relation to get.
1001
1002    pub relation: String,
1003}
1004
1005/// Returns the NodeId of the matched element according to certain relations.
1006
1007#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1008#[serde(rename_all = "camelCase")]
1009pub struct GetElementByRelationReturns {
1010    /// NodeId of the element matching the queried relation.
1011
1012    pub nodeId: NodeId,
1013}
1014
1015/// Removes attribute with given name from an element with given id.
1016
1017#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1018#[serde(rename_all = "camelCase")]
1019pub struct RemoveAttributeParams {
1020    /// Id of the element to remove attribute from.
1021
1022    pub nodeId: NodeId,
1023    /// Name of the attribute to remove.
1024
1025    pub name: String,
1026}
1027
1028/// Removes node with given id.
1029
1030#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1031#[serde(rename_all = "camelCase")]
1032pub struct RemoveNodeParams {
1033    /// Id of the node to remove.
1034
1035    pub nodeId: NodeId,
1036}
1037
1038/// Requests that children of the node with given id are returned to the caller in form of
1039/// 'setChildNodes' events where not only immediate children are retrieved, but all children down to
1040/// the specified depth.
1041
1042#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1043#[serde(rename_all = "camelCase")]
1044pub struct RequestChildNodesParams {
1045    /// Id of the node to get children for.
1046
1047    pub nodeId: NodeId,
1048    /// The maximum depth at which children should be retrieved, defaults to 1. Use -1 for the
1049    /// entire subtree or provide an integer larger than 0.
1050
1051    #[serde(skip_serializing_if = "Option::is_none")]
1052    pub depth: Option<i64>,
1053    /// Whether or not iframes and shadow roots should be traversed when returning the sub-tree
1054    /// (default is false).
1055
1056    #[serde(skip_serializing_if = "Option::is_none")]
1057    pub pierce: Option<bool>,
1058}
1059
1060/// Requests that the node is sent to the caller given the JavaScript node object reference. All
1061/// nodes that form the path from the node to the root are also sent to the client as a series of
1062/// 'setChildNodes' notifications.
1063
1064#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1065#[serde(rename_all = "camelCase")]
1066pub struct RequestNodeParams {
1067    /// JavaScript object id to convert into node.
1068
1069    pub objectId: crate::runtime::RemoteObjectId,
1070}
1071
1072/// Requests that the node is sent to the caller given the JavaScript node object reference. All
1073/// nodes that form the path from the node to the root are also sent to the client as a series of
1074/// 'setChildNodes' notifications.
1075
1076#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1077#[serde(rename_all = "camelCase")]
1078pub struct RequestNodeReturns {
1079    /// Node id for given object.
1080
1081    pub nodeId: NodeId,
1082}
1083
1084/// Resolves the JavaScript node object for a given NodeId or BackendNodeId.
1085
1086#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1087#[serde(rename_all = "camelCase")]
1088pub struct ResolveNodeParams {
1089    /// Id of the node to resolve.
1090
1091    #[serde(skip_serializing_if = "Option::is_none")]
1092    pub nodeId: Option<NodeId>,
1093    /// Backend identifier of the node to resolve.
1094
1095    #[serde(skip_serializing_if = "Option::is_none")]
1096    pub backendNodeId: Option<crate::dom::BackendNodeId>,
1097    /// Symbolic group name that can be used to release multiple objects.
1098
1099    #[serde(skip_serializing_if = "Option::is_none")]
1100    pub objectGroup: Option<String>,
1101    /// Execution context in which to resolve the node.
1102
1103    #[serde(skip_serializing_if = "Option::is_none")]
1104    pub executionContextId: Option<crate::runtime::ExecutionContextId>,
1105}
1106
1107/// Resolves the JavaScript node object for a given NodeId or BackendNodeId.
1108
1109#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1110#[serde(rename_all = "camelCase")]
1111pub struct ResolveNodeReturns {
1112    /// JavaScript object wrapper for given node.
1113
1114    pub object: crate::runtime::RemoteObject,
1115}
1116
1117/// Sets attribute for an element with given id.
1118
1119#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1120#[serde(rename_all = "camelCase")]
1121pub struct SetAttributeValueParams {
1122    /// Id of the element to set attribute for.
1123
1124    pub nodeId: NodeId,
1125    /// Attribute name.
1126
1127    pub name: String,
1128    /// Attribute value.
1129
1130    pub value: String,
1131}
1132
1133/// Sets attributes on element with given id. This method is useful when user edits some existing
1134/// attribute value and types in several attribute name/value pairs.
1135
1136#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1137#[serde(rename_all = "camelCase")]
1138pub struct SetAttributesAsTextParams {
1139    /// Id of the element to set attributes for.
1140
1141    pub nodeId: NodeId,
1142    /// Text with a number of attributes. Will parse this text using HTML parser.
1143
1144    pub text: String,
1145    /// Attribute name to replace with new attributes derived from text in case text parsed
1146    /// successfully.
1147
1148    #[serde(skip_serializing_if = "Option::is_none")]
1149    pub name: Option<String>,
1150}
1151
1152/// Sets files for the given file input element.
1153
1154#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1155#[serde(rename_all = "camelCase")]
1156pub struct SetFileInputFilesParams {
1157    /// Array of file paths to set.
1158
1159    pub files: Vec<String>,
1160    /// Identifier of the node.
1161
1162    #[serde(skip_serializing_if = "Option::is_none")]
1163    pub nodeId: Option<NodeId>,
1164    /// Identifier of the backend node.
1165
1166    #[serde(skip_serializing_if = "Option::is_none")]
1167    pub backendNodeId: Option<BackendNodeId>,
1168    /// JavaScript object id of the node wrapper.
1169
1170    #[serde(skip_serializing_if = "Option::is_none")]
1171    pub objectId: Option<crate::runtime::RemoteObjectId>,
1172}
1173
1174/// Sets if stack traces should be captured for Nodes. See 'Node.getNodeStackTraces'. Default is disabled.
1175
1176#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1177#[serde(rename_all = "camelCase")]
1178pub struct SetNodeStackTracesEnabledParams {
1179    /// Enable or disable.
1180
1181    pub enable: bool,
1182}
1183
1184/// Gets stack traces associated with a Node. As of now, only provides stack trace for Node creation.
1185
1186#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1187#[serde(rename_all = "camelCase")]
1188pub struct GetNodeStackTracesParams {
1189    /// Id of the node to get stack traces for.
1190
1191    pub nodeId: NodeId,
1192}
1193
1194/// Gets stack traces associated with a Node. As of now, only provides stack trace for Node creation.
1195
1196#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1197#[serde(rename_all = "camelCase")]
1198pub struct GetNodeStackTracesReturns {
1199    /// Creation stack trace, if available.
1200
1201    #[serde(skip_serializing_if = "Option::is_none")]
1202    pub creation: Option<crate::runtime::StackTrace>,
1203}
1204
1205/// Returns file information for the given
1206/// File wrapper.
1207
1208#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1209#[serde(rename_all = "camelCase")]
1210pub struct GetFileInfoParams {
1211    /// JavaScript object id of the node wrapper.
1212
1213    pub objectId: crate::runtime::RemoteObjectId,
1214}
1215
1216/// Returns file information for the given
1217/// File wrapper.
1218
1219#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1220#[serde(rename_all = "camelCase")]
1221pub struct GetFileInfoReturns {
1222
1223    pub path: String,
1224}
1225
1226/// Returns list of detached nodes
1227
1228#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1229#[serde(rename_all = "camelCase")]
1230pub struct GetDetachedDomNodesReturns {
1231    /// The list of detached nodes
1232
1233    pub detachedNodes: Vec<DetachedElementInfo>,
1234}
1235
1236/// Enables console to refer to the node with given id via $x (see Command Line API for more details
1237/// $x functions).
1238
1239#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1240#[serde(rename_all = "camelCase")]
1241pub struct SetInspectedNodeParams {
1242    /// DOM node id to be accessible by means of $x command line API.
1243
1244    pub nodeId: NodeId,
1245}
1246
1247/// Sets node name for a node with given id.
1248
1249#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1250#[serde(rename_all = "camelCase")]
1251pub struct SetNodeNameParams {
1252    /// Id of the node to set name for.
1253
1254    pub nodeId: NodeId,
1255    /// New node's name.
1256
1257    pub name: String,
1258}
1259
1260/// Sets node name for a node with given id.
1261
1262#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1263#[serde(rename_all = "camelCase")]
1264pub struct SetNodeNameReturns {
1265    /// New node's id.
1266
1267    pub nodeId: NodeId,
1268}
1269
1270/// Sets node value for a node with given id.
1271
1272#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1273#[serde(rename_all = "camelCase")]
1274pub struct SetNodeValueParams {
1275    /// Id of the node to set value for.
1276
1277    pub nodeId: NodeId,
1278    /// New node's value.
1279
1280    pub value: String,
1281}
1282
1283/// Sets node HTML markup, returns new node id.
1284
1285#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1286#[serde(rename_all = "camelCase")]
1287pub struct SetOuterHTMLParams {
1288    /// Id of the node to set markup for.
1289
1290    pub nodeId: NodeId,
1291    /// Outer HTML markup to set.
1292
1293    pub outerHTML: String,
1294}
1295
1296/// Returns iframe node that owns iframe with the given domain.
1297
1298#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1299#[serde(rename_all = "camelCase")]
1300pub struct GetFrameOwnerParams {
1301
1302    pub frameId: crate::page::FrameId,
1303}
1304
1305/// Returns iframe node that owns iframe with the given domain.
1306
1307#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1308#[serde(rename_all = "camelCase")]
1309pub struct GetFrameOwnerReturns {
1310    /// Resulting node.
1311
1312    pub backendNodeId: BackendNodeId,
1313    /// Id of the node at given coordinates, only when enabled and requested document.
1314
1315    #[serde(skip_serializing_if = "Option::is_none")]
1316    pub nodeId: Option<NodeId>,
1317}
1318
1319/// Returns the query container of the given node based on container query
1320/// conditions: containerName, physical and logical axes, and whether it queries
1321/// scroll-state or anchored elements. If no axes are provided and
1322/// queriesScrollState is false, the style container is returned, which is the
1323/// direct parent or the closest element with a matching container-name.
1324
1325#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1326#[serde(rename_all = "camelCase")]
1327pub struct GetContainerForNodeParams {
1328
1329    pub nodeId: NodeId,
1330
1331    #[serde(skip_serializing_if = "Option::is_none")]
1332    pub containerName: Option<String>,
1333
1334    #[serde(skip_serializing_if = "Option::is_none")]
1335    pub physicalAxes: Option<PhysicalAxes>,
1336
1337    #[serde(skip_serializing_if = "Option::is_none")]
1338    pub logicalAxes: Option<LogicalAxes>,
1339
1340    #[serde(skip_serializing_if = "Option::is_none")]
1341    pub queriesScrollState: Option<bool>,
1342
1343    #[serde(skip_serializing_if = "Option::is_none")]
1344    pub queriesAnchored: Option<bool>,
1345}
1346
1347/// Returns the query container of the given node based on container query
1348/// conditions: containerName, physical and logical axes, and whether it queries
1349/// scroll-state or anchored elements. If no axes are provided and
1350/// queriesScrollState is false, the style container is returned, which is the
1351/// direct parent or the closest element with a matching container-name.
1352
1353#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1354#[serde(rename_all = "camelCase")]
1355pub struct GetContainerForNodeReturns {
1356    /// The container node for the given node, or null if not found.
1357
1358    #[serde(skip_serializing_if = "Option::is_none")]
1359    pub nodeId: Option<NodeId>,
1360}
1361
1362/// Returns the descendants of a container query container that have
1363/// container queries against this container.
1364
1365#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1366#[serde(rename_all = "camelCase")]
1367pub struct GetQueryingDescendantsForContainerParams {
1368    /// Id of the container node to find querying descendants from.
1369
1370    pub nodeId: NodeId,
1371}
1372
1373/// Returns the descendants of a container query container that have
1374/// container queries against this container.
1375
1376#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1377#[serde(rename_all = "camelCase")]
1378pub struct GetQueryingDescendantsForContainerReturns {
1379    /// Descendant nodes with container queries against the given container.
1380
1381    pub nodeIds: Vec<NodeId>,
1382}
1383
1384/// Returns the target anchor element of the given anchor query according to
1385/// <https://www.w3.org/TR/css-anchor-position-1/#target.>
1386
1387#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1388#[serde(rename_all = "camelCase")]
1389pub struct GetAnchorElementParams {
1390    /// Id of the positioned element from which to find the anchor.
1391
1392    pub nodeId: NodeId,
1393    /// An optional anchor specifier, as defined in
1394    /// <https://www.w3.org/TR/css-anchor-position-1/#anchor-specifier.>
1395    /// If not provided, it will return the implicit anchor element for
1396    /// the given positioned element.
1397
1398    #[serde(skip_serializing_if = "Option::is_none")]
1399    pub anchorSpecifier: Option<String>,
1400}
1401
1402/// Returns the target anchor element of the given anchor query according to
1403/// <https://www.w3.org/TR/css-anchor-position-1/#target.>
1404
1405#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1406#[serde(rename_all = "camelCase")]
1407pub struct GetAnchorElementReturns {
1408    /// The anchor element of the given anchor query.
1409
1410    pub nodeId: NodeId,
1411}
1412
1413/// When enabling, this API force-opens the popover identified by nodeId
1414/// and keeps it open until disabled.
1415
1416#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1417#[serde(rename_all = "camelCase")]
1418pub struct ForceShowPopoverParams {
1419    /// Id of the popover HTMLElement
1420
1421    pub nodeId: NodeId,
1422    /// If true, opens the popover and keeps it open. If false, closes the
1423    /// popover if it was previously force-opened.
1424
1425    pub enable: bool,
1426}
1427
1428/// When enabling, this API force-opens the popover identified by nodeId
1429/// and keeps it open until disabled.
1430
1431#[derive(Debug, Clone, Serialize, Deserialize, Default)]
1432#[serde(rename_all = "camelCase")]
1433pub struct ForceShowPopoverReturns {
1434    /// List of popovers that were closed in order to respect popover stacking order.
1435
1436    pub nodeIds: Vec<NodeId>,
1437}