playwright-ruby-client 1.20.1 → 1.22.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/documentation/docs/api/api_request_context.md +15 -2
  3. data/documentation/docs/api/browser_type.md +1 -1
  4. data/documentation/docs/api/console_message.md +27 -1
  5. data/documentation/docs/api/element_handle.md +23 -8
  6. data/documentation/docs/api/experimental/android.md +1 -1
  7. data/documentation/docs/api/file_chooser.md +1 -1
  8. data/documentation/docs/api/frame.md +12 -5
  9. data/documentation/docs/api/frame_locator.md +1 -1
  10. data/documentation/docs/api/locator.md +32 -8
  11. data/documentation/docs/api/page.md +18 -8
  12. data/documentation/docs/api/route.md +2 -0
  13. data/documentation/docs/include/api_coverage.md +1 -0
  14. data/documentation/package.json +6 -6
  15. data/documentation/yarn.lock +2931 -3220
  16. data/lib/playwright/channel_owners/android.rb +2 -1
  17. data/lib/playwright/channel_owners/android_device.rb +0 -4
  18. data/lib/playwright/channel_owners/browser_context.rb +10 -2
  19. data/lib/playwright/channel_owners/element_handle.rb +12 -3
  20. data/lib/playwright/channel_owners/frame.rb +4 -5
  21. data/lib/playwright/channel_owners/page.rb +12 -8
  22. data/lib/playwright/channel_owners/writable_stream.rb +14 -0
  23. data/lib/playwright/input_files.rb +60 -8
  24. data/lib/playwright/javascript/value_parser.rb +30 -17
  25. data/lib/playwright/javascript/value_serializer.rb +13 -2
  26. data/lib/playwright/javascript/visitor_info.rb +26 -0
  27. data/lib/playwright/locator_impl.rb +15 -0
  28. data/lib/playwright/playwright_api.rb +26 -6
  29. data/lib/playwright/transport.rb +12 -3
  30. data/lib/playwright/version.rb +2 -2
  31. data/lib/playwright_api/accessibility.rb +2 -1
  32. data/lib/playwright_api/android.rb +2 -2
  33. data/lib/playwright_api/android_device.rb +0 -5
  34. data/lib/playwright_api/api_request.rb +3 -3
  35. data/lib/playwright_api/api_request_context.rb +15 -2
  36. data/lib/playwright_api/browser_context.rb +5 -5
  37. data/lib/playwright_api/browser_type.rb +2 -2
  38. data/lib/playwright_api/console_message.rb +20 -1
  39. data/lib/playwright_api/element_handle.rb +53 -38
  40. data/lib/playwright_api/file_chooser.rb +1 -1
  41. data/lib/playwright_api/frame.rb +30 -23
  42. data/lib/playwright_api/frame_locator.rb +1 -1
  43. data/lib/playwright_api/locator.rb +48 -27
  44. data/lib/playwright_api/page.rb +39 -29
  45. data/lib/playwright_api/playwright.rb +1 -1
  46. data/lib/playwright_api/route.rb +2 -0
  47. data/lib/playwright_api/selectors.rb +1 -1
  48. data/lib/playwright_api/tracing.rb +1 -1
  49. data/lib/playwright_api/worker.rb +4 -4
  50. metadata +5 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a0ac92a21e56cb8136a67c37b4f0a7f5edd5668124c8f54a7d676fd384568fd6
4
- data.tar.gz: 8d1f15d0f9c3dfc190d0cc0976814ab6bf90a927af722d4164861e57c93564a2
3
+ metadata.gz: 82040f41eb8c972a8e3415aac148c27218e9fcbb00d7e09832bd75da506d2367
4
+ data.tar.gz: a42be0ab4e00bb0ef36516474cca8220147d8c635e44c581c799ee65e396721f
5
5
  SHA512:
6
- metadata.gz: 746dcb1563f9777c374572d2b7ecfbde7833a3ce1b546933958ae920a417d1e474e27c8b569b3fc25cc117735e07bdb420dec838baadebe6375ab83d13c959bd
7
- data.tar.gz: a9dca767fdfec65ba0ef854677e600ef00fabfbdd60ad534fb5182e292c603eb4cbb1b1eb77440f85415d5189bce902d3899389033c591f6e1d1d925de67afc4
6
+ metadata.gz: 615d15f014ca5f175d9da7504583693903d0ebd4c3d47522bf2f5c0add5aa01f26551300834b86cd944a2eacb2ef38062c341ec14f1177b7f517a16dab6e90fe
7
+ data.tar.gz: 97de038214b07abfbeb9eece923c0b031793b8939107df5f7b37268dbb4598c188dc88c4870766cf31d0bf28416610f46c996518a2f37fc8c73d5b672f713005
@@ -5,10 +5,23 @@ sidebar_position: 10
5
5
  # APIRequestContext
6
6
 
7
7
  This API is used for the Web API testing. You can use it to trigger API endpoints, configure micro-services, prepare
8
- environment or the service to your e2e test. When used on [Page](./page) or a [BrowserContext](./browser_context), this API will automatically use
9
- the cookies from the corresponding [BrowserContext](./browser_context). This means that if you log in using this API, your e2e test will be
8
+ environment or the service to your e2e test.
9
+
10
+ Each Playwright browser context has associated with it [APIRequestContext](./api_request_context) instance which shares cookie storage with the
11
+ browser context and can be accessed via [BrowserContext#request](./browser_context#request) or [Page#request](./page#request). It is also
12
+ possible to create a new APIRequestContext instance manually by calling [APIRequest#new_context](./api_request#new_context).
13
+
14
+ **Cookie management**
15
+
16
+ [APIRequestContext](./api_request_context) retuned by [BrowserContext#request](./browser_context#request) and [Page#request](./page#request) shares cookie storage
17
+ with the corresponding [BrowserContext](./browser_context). Each API request will have `Cookie` header populated with the values from the
18
+ browser context. If the API response contains `Set-Cookie` header it will automatically update [BrowserContext](./browser_context) cookies
19
+ and requests made from the page will pick them up. This means that if you log in using this API, your e2e test will be
10
20
  logged in and vice versa.
11
21
 
22
+ If you want API requests to not interfere with the browser cookies you shoud create a new [APIRequestContext](./api_request_context) by calling
23
+ [APIRequest#new_context](./api_request#new_context). Such [APIRequestContext](./api_request_context) object will have its own isolated cookie storage.
24
+
12
25
  ```ruby
13
26
  playwright.chromium.launch do |browser|
14
27
  # This will launch a new browser, create a context and page. When making HTTP
@@ -31,7 +31,7 @@ def connect_over_cdp(
31
31
  &block)
32
32
  ```
33
33
 
34
- This methods attaches Playwright to an existing browser instance using the Chrome DevTools Protocol.
34
+ This method attaches Playwright to an existing browser instance using the Chrome DevTools Protocol.
35
35
 
36
36
  The default browser context is accessible via [Browser#contexts](./browser#contexts).
37
37
 
@@ -4,7 +4,33 @@ sidebar_position: 10
4
4
 
5
5
  # ConsoleMessage
6
6
 
7
- [ConsoleMessage](./console_message) objects are dispatched by page via the [`event: Page.console`] event.
7
+ [ConsoleMessage](./console_message) objects are dispatched by page via the [`event: Page.console`] event. For each console messages logged
8
+ in the page there will be corresponding event in the Playwright context.
9
+
10
+ ```ruby
11
+ # Listen for all console logs
12
+ page.on("console", ->(msg) { puts msg.text })
13
+
14
+ # Listen for all console events and handle errors
15
+ page.on("console", ->(msg) {
16
+ if msg.type == 'error'
17
+ puts "error: #{msg.text}"
18
+ end
19
+ })
20
+
21
+ # Get the next console log
22
+ msg = page.expect_console_message do
23
+ # Issue console.log inside the page
24
+ page.evaluate("console.error('hello', 42, { foo: 'bar' })")
25
+ end
26
+
27
+ # Deconstruct print arguments
28
+ msg.args[0].json_value # => 'hello'
29
+ msg.args[1].json_value # => 42
30
+ msg.args[2].json_value # => { 'foo' => 'bar' }
31
+ ```
32
+
33
+
8
34
 
9
35
  ## args
10
36
 
@@ -330,7 +330,10 @@ Returns the `element.innerText`.
330
330
  def input_value(timeout: nil)
331
331
  ```
332
332
 
333
- Returns `input.value` for `<input>` or `<textarea>` or `<select>` element. Throws for non-input elements.
333
+ Returns `input.value` for the selected `<input>` or `<textarea>` or `<select>` element.
334
+
335
+ Throws for non-input elements. However, if the element is inside the `<label>` element that has an associated
336
+ [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), returns the value of the control.
334
337
 
335
338
  ## checked?
336
339
 
@@ -436,19 +439,25 @@ The method finds all elements matching the specified selector in the [ElementHan
436
439
  ```
437
440
  def screenshot(
438
441
  animations: nil,
442
+ caret: nil,
439
443
  mask: nil,
440
444
  omitBackground: nil,
441
445
  path: nil,
442
446
  quality: nil,
447
+ scale: nil,
443
448
  timeout: nil,
444
449
  type: nil)
445
450
  ```
446
451
 
447
- Returns the buffer with the captured screenshot.
452
+ This method captures a screenshot of the page, clipped to the size and position of this particular element. If the
453
+ element is covered by other elements, it will not be actually visible on the screenshot. If the element is a scrollable
454
+ container, only the currently scrolled content will be visible on the screenshot.
448
455
 
449
456
  This method waits for the [actionability](https://playwright.dev/python/docs/actionability) checks, then scrolls element into view before taking a
450
457
  screenshot. If the element is detached from DOM, the method throws an error.
451
458
 
459
+ Returns the buffer with the captured screenshot.
460
+
452
461
  ## scroll_into_view_if_needed
453
462
 
454
463
  ```
@@ -511,6 +520,10 @@ def select_text(force: nil, timeout: nil)
511
520
  This method waits for [actionability](https://playwright.dev/python/docs/actionability) checks, then focuses the element and selects all its text
512
521
  content.
513
522
 
523
+ If the element is inside the `<label>` element that has an associated
524
+ [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), focuses and selects text in the
525
+ control instead.
526
+
514
527
  ## set_checked
515
528
 
516
529
  ```
@@ -544,11 +557,13 @@ def set_input_files(files, noWaitAfter: nil, timeout: nil)
544
557
  ```
545
558
  alias: `input_files=`
546
559
 
547
- This method expects `elementHandle` to point to an
548
- [input element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input).
549
-
550
560
  Sets the value of the file input to these file paths or files. If some of the `filePaths` are relative paths, then they
551
- are resolved relative to the the current working directory. For empty array, clears the selected files.
561
+ are resolved relative to the current working directory. For empty array, clears the selected files.
562
+
563
+ This method expects [ElementHandle](./element_handle) to point to an
564
+ [input element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input). However, if the element is inside the
565
+ `<label>` element that has an associated
566
+ [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), targets the control instead.
552
567
 
553
568
  ## tap_point
554
569
 
@@ -641,8 +656,8 @@ def wait_for_element_state(state, timeout: nil)
641
656
 
642
657
  Returns when the element satisfies the `state`.
643
658
 
644
- Depending on the `state` parameter, this method waits for one of the [actionability](https://playwright.dev/python/docs/actionability) checks to pass.
645
- This method throws when the element is detached while waiting, unless waiting for the `"hidden"` state.
659
+ Depending on the `state` parameter, this method waits for one of the [actionability](https://playwright.dev/python/docs/actionability) checks to
660
+ pass. This method throws when the element is detached while waiting, unless waiting for the `"hidden"` state.
646
661
  - `"visible"` Wait until the element is [visible](https://playwright.dev/python/docs/actionability).
647
662
  - `"hidden"` Wait until the element is [not visible](https://playwright.dev/python/docs/actionability) or
648
663
  [not attached](https://playwright.dev/python/docs/actionability). Note that waiting for hidden does not throw when the element detaches.
@@ -33,7 +33,7 @@ PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm i -D playwright
33
33
  ## devices
34
34
 
35
35
  ```
36
- def devices(port: nil)
36
+ def devices(host: nil, omitDriverInstall: nil, port: nil)
37
37
  ```
38
38
 
39
39
  Returns the list of detected Android devices.
@@ -47,4 +47,4 @@ def set_files(files, noWaitAfter: nil, timeout: nil)
47
47
  alias: `files=`
48
48
 
49
49
  Sets the value of the file input this chooser is associated with. If some of the `filePaths` are relative paths, then
50
- they are resolved relative to the the current working directory. For empty array, clears the selected files.
50
+ they are resolved relative to the current working directory. For empty array, clears the selected files.
@@ -486,7 +486,10 @@ Returns `element.innerText`.
486
486
  def input_value(selector, strict: nil, timeout: nil)
487
487
  ```
488
488
 
489
- Returns `input.value` for the selected `<input>` or `<textarea>` or `<select>` element. Throws for non-input elements.
489
+ Returns `input.value` for the selected `<input>` or `<textarea>` or `<select>` element.
490
+
491
+ Throws for non-input elements. However, if the element is inside the `<label>` element that has an associated
492
+ [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), returns the value of the control.
490
493
 
491
494
  ## checked?
492
495
 
@@ -556,6 +559,8 @@ The method returns an element locator that can be used to perform actions in the
556
559
  element immediately before performing an action, so a series of actions on the same locator can in fact be performed on
557
560
  different DOM elements. That would happen if the DOM structure between those actions has changed.
558
561
 
562
+ [Learn more about locators](https://playwright.dev/python/docs/locators).
563
+
559
564
  ## name
560
565
 
561
566
  ```
@@ -724,11 +729,13 @@ def set_input_files(
724
729
  timeout: nil)
725
730
  ```
726
731
 
727
- This method expects `selector` to point to an
728
- [input element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input).
729
-
730
732
  Sets the value of the file input to these file paths or files. If some of the `filePaths` are relative paths, then they
731
- are resolved relative to the the current working directory. For empty array, clears the selected files.
733
+ are resolved relative to the current working directory. For empty array, clears the selected files.
734
+
735
+ This method expects `selector` to point to an
736
+ [input element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input). However, if the element is inside the
737
+ `<label>` element that has an associated
738
+ [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), targets the control instead.
732
739
 
733
740
  ## tap_point
734
741
 
@@ -76,4 +76,4 @@ The method finds an element matching the specified selector in the FrameLocator'
76
76
  def nth(index)
77
77
  ```
78
78
 
79
- Returns locator to the n-th matching frame.
79
+ Returns locator to the n-th matching frame. It's zero based, `nth(0)` selects the first frame.
@@ -285,6 +285,14 @@ instead.
285
285
 
286
286
  To send fine-grained keyboard events, use [Locator#type](./locator#type).
287
287
 
288
+ ## filter
289
+
290
+ ```
291
+ def filter(has: nil, hasText: nil)
292
+ ```
293
+
294
+ This method narrows existing locator according to the options, for example filters by text.
295
+
288
296
  ## first
289
297
 
290
298
  ```
@@ -378,7 +386,10 @@ Returns the `element.innerText`.
378
386
  def input_value(timeout: nil)
379
387
  ```
380
388
 
381
- Returns `input.value` for `<input>` or `<textarea>` or `<select>` element. Throws for non-input elements.
389
+ Returns `input.value` for the selected `<input>` or `<textarea>` or `<select>` element.
390
+
391
+ Throws for non-input elements. However, if the element is inside the `<label>` element that has an associated
392
+ [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), returns the value of the control.
382
393
 
383
394
  ## checked?
384
395
 
@@ -442,7 +453,8 @@ Returns locator to the last matching element.
442
453
  def locator(selector, has: nil, hasText: nil)
443
454
  ```
444
455
 
445
- The method finds an element matching the specified selector in the [Locator](./locator)'s subtree.
456
+ The method finds an element matching the specified selector in the [Locator](./locator)'s subtree. It also accepts filter options,
457
+ similar to [Locator#filter](./locator#filter) method.
446
458
 
447
459
  ## nth
448
460
 
@@ -450,7 +462,7 @@ The method finds an element matching the specified selector in the [Locator](./l
450
462
  def nth(index)
451
463
  ```
452
464
 
453
- Returns locator to the n-th matching element.
465
+ Returns locator to the n-th matching element. It's zero based, `nth(0)` selects the first element.
454
466
 
455
467
  ## page
456
468
 
@@ -490,19 +502,25 @@ modifier, modifier is pressed and being held while the subsequent key is being p
490
502
  ```
491
503
  def screenshot(
492
504
  animations: nil,
505
+ caret: nil,
493
506
  mask: nil,
494
507
  omitBackground: nil,
495
508
  path: nil,
496
509
  quality: nil,
510
+ scale: nil,
497
511
  timeout: nil,
498
512
  type: nil)
499
513
  ```
500
514
 
501
- Returns the buffer with the captured screenshot.
515
+ This method captures a screenshot of the page, clipped to the size and position of a particular element matching the
516
+ locator. If the element is covered by other elements, it will not be actually visible on the screenshot. If the element
517
+ is a scrollable container, only the currently scrolled content will be visible on the screenshot.
502
518
 
503
519
  This method waits for the [actionability](https://playwright.dev/python/docs/actionability) checks, then scrolls element into view before taking a
504
520
  screenshot. If the element is detached from DOM, the method throws an error.
505
521
 
522
+ Returns the buffer with the captured screenshot.
523
+
506
524
  ## scroll_into_view_if_needed
507
525
 
508
526
  ```
@@ -562,6 +580,10 @@ def select_text(force: nil, timeout: nil)
562
580
  This method waits for [actionability](https://playwright.dev/python/docs/actionability) checks, then focuses the element and selects all its text
563
581
  content.
564
582
 
583
+ If the element is inside the `<label>` element that has an associated
584
+ [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), focuses and selects text in the
585
+ control instead.
586
+
565
587
  ## set_checked
566
588
 
567
589
  ```
@@ -595,11 +617,13 @@ def set_input_files(files, noWaitAfter: nil, timeout: nil)
595
617
  ```
596
618
  alias: `input_files=`
597
619
 
598
- This method expects `element` to point to an
599
- [input element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input).
600
-
601
620
  Sets the value of the file input to these file paths or files. If some of the `filePaths` are relative paths, then they
602
- are resolved relative to the the current working directory. For empty array, clears the selected files.
621
+ are resolved relative to the current working directory. For empty array, clears the selected files.
622
+
623
+ This method expects [Locator](./locator) to point to an
624
+ [input element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input). However, if the element is inside the
625
+ `<label>` element that has an associated
626
+ [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), targets the control instead.
603
627
 
604
628
  ## tap_point
605
629
 
@@ -642,8 +642,8 @@ Navigate to the next page in history.
642
642
  def goto(url, referer: nil, timeout: nil, waitUntil: nil)
643
643
  ```
644
644
 
645
- Returns the main resource response. In case of multiple redirects, the navigation will resolve with the response of the
646
- last redirect.
645
+ Returns the main resource response. In case of multiple redirects, the navigation will resolve with the first
646
+ non-redirect response.
647
647
 
648
648
  The method will throw an error if:
649
649
  - there's an SSL error (e.g. in case of self-signed certificates).
@@ -711,7 +711,10 @@ Returns `element.innerText`.
711
711
  def input_value(selector, strict: nil, timeout: nil)
712
712
  ```
713
713
 
714
- Returns `input.value` for the selected `<input>` or `<textarea>` or `<select>` element. Throws for non-input elements.
714
+ Returns `input.value` for the selected `<input>` or `<textarea>` or `<select>` element.
715
+
716
+ Throws for non-input elements. However, if the element is inside the `<label>` element that has an associated
717
+ [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), returns the value of the control.
715
718
 
716
719
  ## checked?
717
720
 
@@ -781,6 +784,8 @@ The method returns an element locator that can be used to perform actions on the
781
784
  element immediately before performing an action, so a series of actions on the same locator can in fact be performed on
782
785
  different DOM elements. That would happen if the DOM structure between those actions has changed.
783
786
 
787
+ [Learn more about locators](https://playwright.dev/python/docs/locators).
788
+
784
789
  Shortcut for main frame's [Frame#locator](./frame#locator).
785
790
 
786
791
  ## main_frame
@@ -1013,12 +1018,14 @@ To remove a route with its handler you can use [Page#unroute](./page#unroute).
1013
1018
  ```
1014
1019
  def screenshot(
1015
1020
  animations: nil,
1021
+ caret: nil,
1016
1022
  clip: nil,
1017
1023
  fullPage: nil,
1018
1024
  mask: nil,
1019
1025
  omitBackground: nil,
1020
1026
  path: nil,
1021
1027
  quality: nil,
1028
+ scale: nil,
1022
1029
  timeout: nil,
1023
1030
  type: nil)
1024
1031
  ```
@@ -1153,11 +1160,13 @@ def set_input_files(
1153
1160
  timeout: nil)
1154
1161
  ```
1155
1162
 
1156
- This method expects `selector` to point to an
1157
- [input element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input).
1158
-
1159
1163
  Sets the value of the file input to these file paths or files. If some of the `filePaths` are relative paths, then they
1160
- are resolved relative to the the current working directory. For empty array, clears the selected files.
1164
+ are resolved relative to the current working directory. For empty array, clears the selected files.
1165
+
1166
+ This method expects `selector` to point to an
1167
+ [input element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input). However, if the element is inside the
1168
+ `<label>` element that has an associated
1169
+ [control](https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/control), targets the control instead.
1161
1170
 
1162
1171
  ## set_viewport_size
1163
1172
 
@@ -1606,6 +1615,7 @@ associated with the page.
1606
1615
 
1607
1616
  ## request
1608
1617
 
1609
- API testing helper associated with this page. Requests made with this API will use page cookies.
1618
+ API testing helper associated with this page. This method returns the same instance as
1619
+ [BrowserContext#request](./browser_context#request) on the page's context. See [BrowserContext#request](./browser_context#request) for more details.
1610
1620
 
1611
1621
  ## touchscreen
@@ -7,6 +7,8 @@ sidebar_position: 10
7
7
  Whenever a network route is set up with [Page#route](./page#route) or [BrowserContext#route](./browser_context#route), the [Route](./route) object
8
8
  allows to handle the route.
9
9
 
10
+ Learn more about [networking](https://playwright.dev/python/docs/network).
11
+
10
12
  ## abort
11
13
 
12
14
  ```
@@ -413,6 +413,7 @@
413
413
  * evaluate_all
414
414
  * evaluate_handle
415
415
  * fill
416
+ * filter
416
417
  * first
417
418
  * focus
418
419
  * frame_locator
@@ -14,14 +14,14 @@
14
14
  "write-heading-ids": "docusaurus write-heading-ids"
15
15
  },
16
16
  "dependencies": {
17
- "@docusaurus/core": "^2.0.0-beta.6",
18
- "@docusaurus/preset-classic": "^2.0.0-beta.6",
19
- "@mdx-js/react": "^1.6.21",
20
- "@svgr/webpack": "^5.5.0",
17
+ "@docusaurus/core": "^2.0.0-beta.18",
18
+ "@docusaurus/preset-classic": "^2.0.0-beta.18",
19
+ "@mdx-js/react": "^1.6.22",
20
+ "@svgr/webpack": "^6.2.1",
21
21
  "clsx": "^1.1.1",
22
22
  "file-loader": "^6.2.0",
23
- "react": "^17.0.1",
24
- "react-dom": "^17.0.1",
23
+ "react": "^18.0.0",
24
+ "react-dom": "^18.0.0",
25
25
  "url-loader": "^4.1.1"
26
26
  },
27
27
  "browserslist": {