From db3d5d06a84990644f2cee434e38211d5db71642 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Mon, 30 Jan 2023 20:07:53 +0300 Subject: [PATCH 01/62] Fix icon (LearnFooter) --- src/components/LearnFooter.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/LearnFooter.tsx b/src/components/LearnFooter.tsx index 9f4fb3d0..68cd6212 100644 --- a/src/components/LearnFooter.tsx +++ b/src/components/LearnFooter.tsx @@ -52,7 +52,7 @@ const LearnFooter = () => { 'animate__animated animate__shakeX': error, })} size={20} - icon={success ? 'lock-closed' : 'lock-open'} + icon={success ? 'lock-open' : 'lock-closed'} />
From 030f3cb9599955787a507d52a5a2c804943e58bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Mon, 30 Jan 2023 20:08:11 +0300 Subject: [PATCH 02/62] 2.21.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2f8a6c6b..9f841429 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "regexlearn", - "version": "2.21.2", + "version": "2.21.3", "author": { "name": "Aykut Kardaş", "email": "aykutkrds@gmail.com" From 733e5b2fdab2d044a432b65fd91231c4d4d109fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Mon, 30 Jan 2023 21:41:03 +0300 Subject: [PATCH 03/62] Integrate (LearnProgress) (#281) * Integrate (LearnProgress) * Add visible state * Fix ui issues --- src/components/HighlightedText.tsx | 1 + src/components/Icon/selection.json | 2 +- src/components/LearnProgress.tsx | 103 +++++++++++++++++++++++++ src/components/Step.tsx | 1 - src/context/InteractiveAreaContext.tsx | 3 + src/pages/[lang]/learn/[lesson].tsx | 2 + src/styles/globals.css | 4 + 7 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 src/components/LearnProgress.tsx diff --git a/src/components/HighlightedText.tsx b/src/components/HighlightedText.tsx index 0767fd95..80fcd3e8 100644 --- a/src/components/HighlightedText.tsx +++ b/src/components/HighlightedText.tsx @@ -10,6 +10,7 @@ interface HighlightedTextProps { search?: RegExp; children?: React.ReactNode; text: string; + onClick?: () => void; attrs?: { [key: string]: string }; } diff --git a/src/components/Icon/selection.json b/src/components/Icon/selection.json index 3dedeec4..6b0bdbd8 100644 --- a/src/components/Icon/selection.json +++ b/src/components/Icon/selection.json @@ -1 +1 @@ -{"generatorSource":"svgps.app","IcoMoonType":"selection","icons":[{"icon":{"paths":["M822.592 192h14.272c0.015-0 0.032-0 0.049-0 15.82 0 28.958 11.479 31.54 26.562l0.027 0.19 21.312 128c0.276 1.578 0.433 3.394 0.433 5.248 0 17.668-14.318 31.992-31.984 32l-49.345 0-39.040 546.304c-1.239 16.654-15.055 29.696-31.917 29.696-0.007 0-0.013-0-0.020-0l-452.095 0c-0.025 0-0.054 0-0.083 0-16.862 0-30.678-13.043-31.911-29.59l-0.006-0.106-38.912-546.304h-49.152c-17.667-0.008-31.985-14.332-31.985-32 0-1.854 0.158-3.67 0.46-5.438l-0.027 0.19 21.312-128c2.609-15.273 15.747-26.752 31.567-26.752 0.017 0 0.035 0 0.052 0l-0.003-0h14.016l-6.72-93.696c-0.053-0.689-0.083-1.493-0.083-2.304 0-17.673 14.327-32 32-32 0.007 0 0.013 0 0.020 0l571.007-0c0.006-0 0.012-0 0.019-0 17.673 0 32 14.327 32 32 0 0.811-0.030 1.615-0.089 2.41l0.006-0.106-6.72 93.696zM758.464 192l4.544-64h-502.272l4.544 64h493.184zM210.304 320h610.176l-10.688-64h-595.584l-10.688 64h6.784zM279.040 384l36.544 512h392.576l36.544-512h-465.664z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":16,"tags":["EpCoffee"]},"attrs":[{}],"properties":{"order":5,"id":11,"name":"coffee","prevSize":32,"code":59648},"setIdx":0,"setId":3,"iconIdx":0},{"icon":{"paths":["M512 896c-0.093 0.001-0.203 0.002-0.313 0.002-5.617 0-10.887-1.484-15.44-4.082l0.153 0.081c-17.2-9.6-416.4-236.4-416.4-524 0-132.548 107.452-240 240-240 78.248 0 147.75 37.446 191.563 95.396l0.437 0.604c44.25-58.554 113.752-96 192-96 132.548 0 240 107.452 240 240v0c0 122.4-70.8 248-210.4 373.6-60.727 54.775-128.139 104.486-200.184 147.208l-5.816 3.192c-4.399 2.517-9.67 4.002-15.287 4.002-0.11 0-0.22-0.001-0.33-0.002l0.017 0zM320 192c-97.202 0-176 78.798-176 176v0c0 220.8 296 414.8 368 458.8 72-44 368-238 368-458.8 0-0.048 0-0.104 0-0.16 0-97.202-78.798-176-176-176-72.716 0-135.132 44.098-161.964 107.011l-0.436 1.149c-4.916 11.742-16.312 19.841-29.6 19.841s-24.684-8.099-29.521-19.63l-0.079-0.211c-27.065-63.949-89.288-108.001-161.8-108.001-0.211 0-0.422 0-0.632 0.001l0.033-0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":16,"tags":["PhHeart"]},"attrs":[{}],"properties":{"order":4,"id":10,"name":"hearth","prevSize":32,"code":59649},"setIdx":0,"setId":3,"iconIdx":1},{"icon":{"paths":["M1024 608l-192-192v-288h-128v160l-192-192-512 512v32h128v320h320v-192h128v192h320v-320h128z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["home","house"],"defaultCode":59650,"grid":16},"attrs":[],"properties":{"ligatures":"home3, house3","name":"home","order":10,"id":0,"prevSize":32,"code":59650},"setIdx":0,"setId":3,"iconIdx":2},{"icon":{"paths":["M768 64c105.87 0 192 86.13 192 192v192h-128v-192c0-35.29-28.71-64-64-64h-128c-35.29 0-64 28.71-64 64v192h16c26.4 0 48 21.6 48 48v480c0 26.4-21.6 48-48 48h-544c-26.4 0-48-21.6-48-48v-480c0-26.4 21.6-48 48-48h400v-192c0-105.87 86.13-192 192-192h128z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["unlocked","lock-open"],"defaultCode":59792,"grid":16},"attrs":[],"properties":{"ligatures":"unlocked, lock-open","name":"unlocked","order":9,"id":2,"prevSize":32,"code":59792},"setIdx":0,"setId":3,"iconIdx":4},{"icon":{"paths":["M1024 226.4c-37.6 16.8-78.2 28-120.6 33 43.4-26 76.6-67.2 92.4-116.2-40.6 24-85.6 41.6-133.4 51-38.4-40.8-93-66.2-153.4-66.2-116 0-210 94-210 210 0 16.4 1.8 32.4 5.4 47.8-174.6-8.8-329.4-92.4-433-219.6-18 31-28.4 67.2-28.4 105.6 0 72.8 37 137.2 93.4 174.8-34.4-1-66.8-10.6-95.2-26.2 0 0.8 0 1.8 0 2.6 0 101.8 72.4 186.8 168.6 206-17.6 4.8-36.2 7.4-55.4 7.4-13.6 0-26.6-1.4-39.6-3.8 26.8 83.4 104.4 144.2 196.2 146-72 56.4-162.4 90-261 90-17 0-33.6-1-50.2-3 93.2 59.8 203.6 94.4 322.2 94.4 386.4 0 597.8-320.2 597.8-597.8 0-9.2-0.2-18.2-0.6-27.2 41-29.4 76.6-66.4 104.8-108.6z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["twitter","brand","tweet","social"],"defaultCode":60054,"grid":16},"attrs":[],"properties":{"ligatures":"twitter, brand16","name":"twitter","order":6,"id":5,"prevSize":32,"code":60054},"setIdx":0,"setId":3,"iconIdx":7},{"icon":{"paths":["M512.008 12.642c-282.738 0-512.008 229.218-512.008 511.998 0 226.214 146.704 418.132 350.136 485.836 25.586 4.738 34.992-11.11 34.992-24.632 0-12.204-0.48-52.542-0.696-95.324-142.448 30.976-172.504-60.41-172.504-60.41-23.282-59.176-56.848-74.916-56.848-74.916-46.452-31.778 3.51-31.124 3.51-31.124 51.4 3.61 78.476 52.766 78.476 52.766 45.672 78.27 119.776 55.64 149.004 42.558 4.588-33.086 17.852-55.68 32.506-68.464-113.73-12.942-233.276-56.85-233.276-253.032 0-55.898 20.004-101.574 52.76-137.428-5.316-12.9-22.854-64.972 4.952-135.5 0 0 43.006-13.752 140.84 52.49 40.836-11.348 84.636-17.036 128.154-17.234 43.502 0.198 87.336 5.886 128.256 17.234 97.734-66.244 140.656-52.49 140.656-52.49 27.872 70.528 10.35 122.6 5.036 135.5 32.82 35.856 52.694 81.532 52.694 137.428 0 196.654-119.778 239.95-233.79 252.624 18.364 15.89 34.724 47.046 34.724 94.812 0 68.508-0.596 123.644-0.596 140.508 0 13.628 9.222 29.594 35.172 24.566 203.322-67.776 349.842-259.626 349.842-485.768 0-282.78-229.234-511.998-511.992-511.998z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["github","brand","octacat","social"],"defaultCode":60080,"grid":16},"attrs":[],"properties":{"ligatures":"github, brand40","name":"github","order":5,"id":6,"prevSize":32,"code":60080},"setIdx":0,"setId":3,"iconIdx":8},{"icon":{"paths":["M981.188 160.108c-143.632-20.65-302.332-32.108-469.186-32.108-166.86 0-325.556 11.458-469.194 32.108-27.53 107.726-42.808 226.75-42.808 351.892 0 125.14 15.278 244.166 42.808 351.89 143.638 20.652 302.336 32.11 469.194 32.11 166.854 0 325.552-11.458 469.186-32.11 27.532-107.724 42.812-226.75 42.812-351.89 0-125.142-15.28-244.166-42.812-351.892zM384.002 704v-384l320 192-320 192z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["play","video","movie"],"defaultCode":59666,"grid":16},"attrs":[],"properties":{"ligatures":"play, video","name":"play","order":590,"id":9,"prevSize":32,"code":59666},"setIdx":0,"setId":3,"iconIdx":11},{"icon":{"paths":["M213.3 384a85.3 85.3 0 0 1 85.4-85.3h426.6a85.3 85.3 0 0 1 85.4 85.3v213.3a298.7 298.7 0 0 1-298.7 298.7v0a298.7 298.7 0 0 1-298.7-298.7V384Zm128-128v-18.1c0-41.9 16.4-83.6 56.6-95.5 65.1-19.2 163.1-19.2 228.2 0C666.3 154.2 682.7 196 682.7 237.9V256m106.6 64L938.7 170.7M234.7 320L85.3 170.7m170.7 597.3l-170.7 128m128-384H64m896 0H810.7m-42.7 256l170.7 128m-426.7-341.3v341.3"],"attrs":[{"fill":"none","strokeLinecap":"round","strokeLinejoin":"round","strokeWidth":85.33333333333333}],"width":1024},"properties":{"name":"bug"}},{"icon":{"paths":["M128 128v64M128 896v-256m0 0l118.2-29.6a384 384 0 0 1 264.9 29.1l4.6 2.3a384 384 0 0 0 259.6 30.3l132.9-31.2a2070.4 2070.4 0 0 1-0.2-448l-132.7 31.3a384 384 0 0 1-259.6-30.4l-4.6-2.3a384 384 0 0 0-264.9-29.1L128 192M128 640V192"],"attrs":[{"fill":"none","strokeWidth":64,"strokeLinecap":"round","strokeLinejoin":"round"}],"width":1024},"properties":{"name":"flag"}},{"icon":{"paths":["M672 736V880C672 906.5 650.5 928 624 928H208C181.5 928 160 906.5 160 880V336C160 309.5 181.5 288 208 288H288C309.8 288 331.2 289.8 352 293.3M672 736H816C842.5 736 864 714.5 864 688V480C864 289.7 725.6 131.8 544 101.3 523.2 97.8 501.8 96 480 96H400C373.5 96 352 117.5 352 144V293.3M672 736H400C373.5 736 352 714.5 352 688V293.3M864 576V496C864 416.5 799.5 352 720 352H656C629.5 352 608 330.5 608 304V240C608 160.5 543.5 96 464 96H416"],"attrs":[{"fill":"none","strokeWidth":64,"strokeLinecap":"round","strokeLinejoin":"round"}],"width":1024},"properties":{"name":"document-duplicate"}},{"icon":{"paths":["M553.4 169.4C565.9 156.9 586.1 156.9 598.6 169.4L918.6 489.4C924.6 495.4 928 503.5 928 512 928 520.5 924.6 528.6 918.6 534.6L598.6 854.6C586.1 867.1 565.9 867.1 553.4 854.6 540.9 842.1 540.9 821.9 553.4 809.4L818.7 544H128C110.3 544 96 529.7 96 512 96 494.3 110.3 480 128 480H818.7L553.4 214.6C540.9 202.1 540.9 181.9 553.4 169.4Z"],"attrs":[{"fillRule":"evenodd","clipRule":"evenodd"}],"width":1024},"properties":{"name":"arrow-right"}},{"icon":{"paths":["M470.6 169.4C483.1 181.9 483.1 202.1 470.6 214.6L205.3 480H896C913.7 480 928 494.3 928 512 928 529.7 913.7 544 896 544H205.3L470.6 809.4C483.1 821.9 483.1 842.1 470.6 854.6 458.1 867.1 437.9 867.1 425.4 854.6L105.4 534.6C92.9 522.1 92.9 501.9 105.4 489.4L425.4 169.4C437.9 156.9 458.1 156.9 470.6 169.4Z"],"attrs":[{"fillRule":"evenodd","clipRule":"evenodd"}],"width":1024},"properties":{"name":"arrow-left"}},{"icon":{"paths":["M512 64C388.3 64 288 164.3 288 288V416C217.3 416 160 473.3 160 544V832C160 902.7 217.3 960 288 960H736C806.7 960 864 902.7 864 832V544C864 473.3 806.7 416 736 416V288C736 164.3 635.7 64 512 64ZM672 416V288C672 199.6 600.4 128 512 128 423.6 128 352 199.6 352 288V416H672Z"],"attrs":[{"fillRule":"evenodd","clipRule":"evenodd"}],"width":1024},"properties":{"name":"lock-closed"}},{"icon":{"paths":["M768 64C891.7 64 992 164.3 992 288V448C992 465.7 977.7 480 960 480 942.3 480 928 465.7 928 448V288C928 199.6 856.4 128 768 128 679.6 128 608 199.6 608 288V416C678.7 416 736 473.3 736 544V832C736 902.7 678.7 960 608 960H160C89.3 960 32 902.7 32 832V544C32 473.3 89.3 416 160 416H544V288C544 164.3 644.3 64 768 64Z"],"attrs":[],"width":1024},"properties":{"name":"lock-open"}},{"icon":{"paths":["M672 448L873.4 246.6C893.5 226.5 928 240.7 928 269.3V754.7C928 783.3 893.5 797.5 873.4 777.4L672 576M192 800H576C629 800 672 757 672 704V320C672 267 629 224 576 224H192C139 224 96 267 96 320V704C96 757 139 800 192 800Z"],"attrs":[{"fill":"none","strokeWidth":64,"strokeLinecap":"round"}],"width":1024},"properties":{"name":"video-camera"}},{"icon":{"paths":["M320 352H704M320 480H512M96 544.4C96 612.7 143.9 672.2 211.5 682.1 259.7 689.2 308.4 694.6 357.5 698.3 372.5 699.4 386.1 707.2 394.5 719.7L512 896 629.5 719.7C637.9 707.2 651.5 699.4 666.5 698.3 715.6 694.6 764.3 689.2 812.5 682.1 880.1 672.2 928 612.7 928 544.4V287.6C928 219.3 880.1 159.8 812.5 149.9 714.4 135.5 614.1 128 512 128 409.9 128 309.6 135.5 211.5 149.9 143.9 159.8 96 219.3 96 287.6V544.4Z"],"attrs":[{"fill":"none","strokeWidth":64,"strokeLinecap":"round","strokeLinejoin":"round"}],"width":1024},"properties":{"name":"chat-bubble"}}]} \ No newline at end of file +{"generatorSource":"svgps.app","IcoMoonType":"selection","icons":[{"icon":{"paths":["M822.592 192h14.272c0.015-0 0.032-0 0.049-0 15.82 0 28.958 11.479 31.54 26.562l0.027 0.19 21.312 128c0.276 1.578 0.433 3.394 0.433 5.248 0 17.668-14.318 31.992-31.984 32l-49.345 0-39.040 546.304c-1.239 16.654-15.055 29.696-31.917 29.696-0.007 0-0.013-0-0.020-0l-452.095 0c-0.025 0-0.054 0-0.083 0-16.862 0-30.678-13.043-31.911-29.59l-0.006-0.106-38.912-546.304h-49.152c-17.667-0.008-31.985-14.332-31.985-32 0-1.854 0.158-3.67 0.46-5.438l-0.027 0.19 21.312-128c2.609-15.273 15.747-26.752 31.567-26.752 0.017 0 0.035 0 0.052 0l-0.003-0h14.016l-6.72-93.696c-0.053-0.689-0.083-1.493-0.083-2.304 0-17.673 14.327-32 32-32 0.007 0 0.013 0 0.020 0l571.007-0c0.006-0 0.012-0 0.019-0 17.673 0 32 14.327 32 32 0 0.811-0.030 1.615-0.089 2.41l0.006-0.106-6.72 93.696zM758.464 192l4.544-64h-502.272l4.544 64h493.184zM210.304 320h610.176l-10.688-64h-595.584l-10.688 64h6.784zM279.040 384l36.544 512h392.576l36.544-512h-465.664z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":16,"tags":["EpCoffee"]},"attrs":[{}],"properties":{"order":5,"id":11,"name":"coffee","prevSize":32,"code":59648},"setIdx":0,"setId":3,"iconIdx":0},{"icon":{"paths":["M512 896c-0.093 0.001-0.203 0.002-0.313 0.002-5.617 0-10.887-1.484-15.44-4.082l0.153 0.081c-17.2-9.6-416.4-236.4-416.4-524 0-132.548 107.452-240 240-240 78.248 0 147.75 37.446 191.563 95.396l0.437 0.604c44.25-58.554 113.752-96 192-96 132.548 0 240 107.452 240 240v0c0 122.4-70.8 248-210.4 373.6-60.727 54.775-128.139 104.486-200.184 147.208l-5.816 3.192c-4.399 2.517-9.67 4.002-15.287 4.002-0.11 0-0.22-0.001-0.33-0.002l0.017 0zM320 192c-97.202 0-176 78.798-176 176v0c0 220.8 296 414.8 368 458.8 72-44 368-238 368-458.8 0-0.048 0-0.104 0-0.16 0-97.202-78.798-176-176-176-72.716 0-135.132 44.098-161.964 107.011l-0.436 1.149c-4.916 11.742-16.312 19.841-29.6 19.841s-24.684-8.099-29.521-19.63l-0.079-0.211c-27.065-63.949-89.288-108.001-161.8-108.001-0.211 0-0.422 0-0.632 0.001l0.033-0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":16,"tags":["PhHeart"]},"attrs":[{}],"properties":{"order":4,"id":10,"name":"hearth","prevSize":32,"code":59649},"setIdx":0,"setId":3,"iconIdx":1},{"icon":{"paths":["M1024 608l-192-192v-288h-128v160l-192-192-512 512v32h128v320h320v-192h128v192h320v-320h128z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["home","house"],"defaultCode":59650,"grid":16},"attrs":[],"properties":{"ligatures":"home3, house3","name":"home","order":10,"id":0,"prevSize":32,"code":59650},"setIdx":0,"setId":3,"iconIdx":2},{"icon":{"paths":["M768 64c105.87 0 192 86.13 192 192v192h-128v-192c0-35.29-28.71-64-64-64h-128c-35.29 0-64 28.71-64 64v192h16c26.4 0 48 21.6 48 48v480c0 26.4-21.6 48-48 48h-544c-26.4 0-48-21.6-48-48v-480c0-26.4 21.6-48 48-48h400v-192c0-105.87 86.13-192 192-192h128z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["unlocked","lock-open"],"defaultCode":59792,"grid":16},"attrs":[],"properties":{"ligatures":"unlocked, lock-open","name":"unlocked","order":9,"id":2,"prevSize":32,"code":59792},"setIdx":0,"setId":3,"iconIdx":4},{"icon":{"paths":["M1024 226.4c-37.6 16.8-78.2 28-120.6 33 43.4-26 76.6-67.2 92.4-116.2-40.6 24-85.6 41.6-133.4 51-38.4-40.8-93-66.2-153.4-66.2-116 0-210 94-210 210 0 16.4 1.8 32.4 5.4 47.8-174.6-8.8-329.4-92.4-433-219.6-18 31-28.4 67.2-28.4 105.6 0 72.8 37 137.2 93.4 174.8-34.4-1-66.8-10.6-95.2-26.2 0 0.8 0 1.8 0 2.6 0 101.8 72.4 186.8 168.6 206-17.6 4.8-36.2 7.4-55.4 7.4-13.6 0-26.6-1.4-39.6-3.8 26.8 83.4 104.4 144.2 196.2 146-72 56.4-162.4 90-261 90-17 0-33.6-1-50.2-3 93.2 59.8 203.6 94.4 322.2 94.4 386.4 0 597.8-320.2 597.8-597.8 0-9.2-0.2-18.2-0.6-27.2 41-29.4 76.6-66.4 104.8-108.6z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["twitter","brand","tweet","social"],"defaultCode":60054,"grid":16},"attrs":[],"properties":{"ligatures":"twitter, brand16","name":"twitter","order":6,"id":5,"prevSize":32,"code":60054},"setIdx":0,"setId":3,"iconIdx":7},{"icon":{"paths":["M512.008 12.642c-282.738 0-512.008 229.218-512.008 511.998 0 226.214 146.704 418.132 350.136 485.836 25.586 4.738 34.992-11.11 34.992-24.632 0-12.204-0.48-52.542-0.696-95.324-142.448 30.976-172.504-60.41-172.504-60.41-23.282-59.176-56.848-74.916-56.848-74.916-46.452-31.778 3.51-31.124 3.51-31.124 51.4 3.61 78.476 52.766 78.476 52.766 45.672 78.27 119.776 55.64 149.004 42.558 4.588-33.086 17.852-55.68 32.506-68.464-113.73-12.942-233.276-56.85-233.276-253.032 0-55.898 20.004-101.574 52.76-137.428-5.316-12.9-22.854-64.972 4.952-135.5 0 0 43.006-13.752 140.84 52.49 40.836-11.348 84.636-17.036 128.154-17.234 43.502 0.198 87.336 5.886 128.256 17.234 97.734-66.244 140.656-52.49 140.656-52.49 27.872 70.528 10.35 122.6 5.036 135.5 32.82 35.856 52.694 81.532 52.694 137.428 0 196.654-119.778 239.95-233.79 252.624 18.364 15.89 34.724 47.046 34.724 94.812 0 68.508-0.596 123.644-0.596 140.508 0 13.628 9.222 29.594 35.172 24.566 203.322-67.776 349.842-259.626 349.842-485.768 0-282.78-229.234-511.998-511.992-511.998z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["github","brand","octacat","social"],"defaultCode":60080,"grid":16},"attrs":[],"properties":{"ligatures":"github, brand40","name":"github","order":5,"id":6,"prevSize":32,"code":60080},"setIdx":0,"setId":3,"iconIdx":8},{"icon":{"paths":["M128 128v64M128 896v-256m0 0l118.2-29.6a384 384 0 0 1 264.9 29.1l4.6 2.3a384 384 0 0 0 259.6 30.3l132.9-31.2a2070.4 2070.4 0 0 1-0.2-448l-132.7 31.3a384 384 0 0 1-259.6-30.4l-4.6-2.3a384 384 0 0 0-264.9-29.1L128 192M128 640V192"],"attrs":[{"fill":"none","strokeWidth":64,"strokeLinecap":"round","strokeLinejoin":"round"}],"width":1024},"properties":{"name":"flag"}},{"icon":{"paths":["M672 736V880C672 906.5 650.5 928 624 928H208C181.5 928 160 906.5 160 880V336C160 309.5 181.5 288 208 288H288C309.8 288 331.2 289.8 352 293.3M672 736H816C842.5 736 864 714.5 864 688V480C864 289.7 725.6 131.8 544 101.3 523.2 97.8 501.8 96 480 96H400C373.5 96 352 117.5 352 144V293.3M672 736H400C373.5 736 352 714.5 352 688V293.3M864 576V496C864 416.5 799.5 352 720 352H656C629.5 352 608 330.5 608 304V240C608 160.5 543.5 96 464 96H416"],"attrs":[{"fill":"none","strokeWidth":64,"strokeLinecap":"round","strokeLinejoin":"round"}],"width":1024},"properties":{"name":"document-duplicate"}},{"icon":{"paths":["M553.4 169.4C565.9 156.9 586.1 156.9 598.6 169.4L918.6 489.4C924.6 495.4 928 503.5 928 512 928 520.5 924.6 528.6 918.6 534.6L598.6 854.6C586.1 867.1 565.9 867.1 553.4 854.6 540.9 842.1 540.9 821.9 553.4 809.4L818.7 544H128C110.3 544 96 529.7 96 512 96 494.3 110.3 480 128 480H818.7L553.4 214.6C540.9 202.1 540.9 181.9 553.4 169.4Z"],"attrs":[{"fillRule":"evenodd","clipRule":"evenodd"}],"width":1024},"properties":{"name":"arrow-right"}},{"icon":{"paths":["M470.6 169.4C483.1 181.9 483.1 202.1 470.6 214.6L205.3 480H896C913.7 480 928 494.3 928 512 928 529.7 913.7 544 896 544H205.3L470.6 809.4C483.1 821.9 483.1 842.1 470.6 854.6 458.1 867.1 437.9 867.1 425.4 854.6L105.4 534.6C92.9 522.1 92.9 501.9 105.4 489.4L425.4 169.4C437.9 156.9 458.1 156.9 470.6 169.4Z"],"attrs":[{"fillRule":"evenodd","clipRule":"evenodd"}],"width":1024},"properties":{"name":"arrow-left"}},{"icon":{"paths":["M512 64C388.3 64 288 164.3 288 288V416C217.3 416 160 473.3 160 544V832C160 902.7 217.3 960 288 960H736C806.7 960 864 902.7 864 832V544C864 473.3 806.7 416 736 416V288C736 164.3 635.7 64 512 64ZM672 416V288C672 199.6 600.4 128 512 128 423.6 128 352 199.6 352 288V416H672Z"],"attrs":[{"fillRule":"evenodd","clipRule":"evenodd"}],"width":1024},"properties":{"name":"lock-closed"}},{"icon":{"paths":["M768 64C891.7 64 992 164.3 992 288V448C992 465.7 977.7 480 960 480 942.3 480 928 465.7 928 448V288C928 199.6 856.4 128 768 128 679.6 128 608 199.6 608 288V416C678.7 416 736 473.3 736 544V832C736 902.7 678.7 960 608 960H160C89.3 960 32 902.7 32 832V544C32 473.3 89.3 416 160 416H544V288C544 164.3 644.3 64 768 64Z"],"attrs":[],"width":1024},"properties":{"name":"lock-open"}},{"icon":{"paths":["M672 448L873.4 246.6C893.5 226.5 928 240.7 928 269.3V754.7C928 783.3 893.5 797.5 873.4 777.4L672 576M192 800H576C629 800 672 757 672 704V320C672 267 629 224 576 224H192C139 224 96 267 96 320V704C96 757 139 800 192 800Z"],"attrs":[{"fill":"none","strokeWidth":64,"strokeLinecap":"round"}],"width":1024},"properties":{"name":"video-camera"}},{"icon":{"paths":["M320 352H704M320 480H512M96 544.4C96 612.7 143.9 672.2 211.5 682.1 259.7 689.2 308.4 694.6 357.5 698.3 372.5 699.4 386.1 707.2 394.5 719.7L512 896 629.5 719.7C637.9 707.2 651.5 699.4 666.5 698.3 715.6 694.6 764.3 689.2 812.5 682.1 880.1 672.2 928 612.7 928 544.4V287.6C928 219.3 880.1 159.8 812.5 149.9 714.4 135.5 614.1 128 512 128 409.9 128 309.6 135.5 211.5 149.9 143.9 159.8 96 219.3 96 287.6V544.4Z"],"attrs":[{"fill":"none","strokeWidth":64,"strokeLinecap":"round","strokeLinejoin":"round"}],"width":1024},"properties":{"name":"chat-bubble"}},{"icon":{"paths":["M192 544L448 800 832 224"],"attrs":[{"fill":"none","strokeWidth":64,"strokeLinecap":"round","strokeLinejoin":"round"}],"width":1024},"properties":{"name":"check"}},{"icon":{"paths":["M224 241.2C224 204.7 263.1 181.5 295.1 199.1L787.5 470C820.7 488.2 820.7 535.8 787.5 554.1L295.1 824.9C263.1 842.5 224 819.3 224 782.8V241.2Z"],"attrs":[{"fill":"none","strokeWidth":64,"strokeLinecap":"round","strokeLinejoin":"round"}],"width":1024},"properties":{"name":"play"}}]} \ No newline at end of file diff --git a/src/components/LearnProgress.tsx b/src/components/LearnProgress.tsx new file mode 100644 index 00000000..58e37f0e --- /dev/null +++ b/src/components/LearnProgress.tsx @@ -0,0 +1,103 @@ +import clsx from 'clsx'; +import { useContext, useEffect, useRef, useState } from 'react'; +import { useIntl } from 'react-intl'; +import Icon from './Icon'; +import { InteractiveAreaContext } from 'src/context/InteractiveAreaContext'; +import HighlightedText from './HighlightedText'; + +const LearnProgress = () => { + const [open, setOpen] = useState(false); + const learnProgressRef = useRef(null); + const { formatMessage } = useIntl(); + const { lessonData, step, setStep, lastStep, updateStorage } = useContext(InteractiveAreaContext); + + useEffect(() => { + const activeitem = [...document.querySelectorAll('.step-item')][step]; + if (!activeitem) return; + const topPos = (activeitem as HTMLDivElement).offsetTop; + learnProgressRef.current.scrollTop = topPos - 153; + }, [step]); + + const handleChangeStep = (step: number) => { + if (step > lastStep) return; + + updateStorage(step); + setStep(step); + }; + + const toggleProgress = () => setOpen(!open); + + return ( +
+
+
+ +
+
+
+ {lessonData.map((lesson, index) => ( +
= index && step !== index, + }, + 'step-item relative truncate max-w-[80%] flex items-center', + index !== lessonData.length - 1 && + "pb-10 after:content-[''] after:block after:w-[2px] after:h-6 after:bg-neutral-700 after:rounded-md after:left-[7px] after:top-6 after:absolute", + )} + > + {step === index && ( + + )} + {lastStep >= index && step !== index && ( + + )} + {lastStep < index && ( + + )} + + handleChangeStep(index)} + attrs={{ + className: step === index ? 'text-emerald-400' : 'text-emerald-600', + }} + /> +
+ ))} +
+
+ ); +}; + +export default LearnProgress; diff --git a/src/components/Step.tsx b/src/components/Step.tsx index fad460b3..046b32d1 100644 --- a/src/components/Step.tsx +++ b/src/components/Step.tsx @@ -7,7 +7,6 @@ import InteractiveArea from 'src/components/InteractiveArea'; import HighlightedText from 'src/components/HighlightedText'; import Progress from 'src/components/Progress'; import Button, { ButtonVariants } from 'src/components/Button'; -import SupportButton from 'src/components/SupportButton'; import { InteractiveAreaContext } from 'src/context/InteractiveAreaContext'; const Step = () => { diff --git a/src/context/InteractiveAreaContext.tsx b/src/context/InteractiveAreaContext.tsx index 2fa8d60a..f1f2d1b7 100644 --- a/src/context/InteractiveAreaContext.tsx +++ b/src/context/InteractiveAreaContext.tsx @@ -18,6 +18,7 @@ interface IInteractiveAreaContext { setLockError: (lockError: boolean) => void; prevStep: () => void; nextStep: () => void; + updateStorage: (step: number) => void; lesson: Lesson; lessonData: LessonData[]; data: LessonData; @@ -38,6 +39,7 @@ const InteractiveAreaContext = createContext({ setMatch: () => {}, prevStep: () => {}, nextStep: () => {}, + updateStorage: () => {}, lesson: null, lessonData: [], data: null, @@ -122,6 +124,7 @@ const InteractiveAreaProvider = ({ lesson, lessonData, children }) => { setLockError, prevStep, nextStep, + updateStorage, lesson, lessonData, data, diff --git a/src/pages/[lang]/learn/[lesson].tsx b/src/pages/[lang]/learn/[lesson].tsx index a3b61d1f..86ab2244 100644 --- a/src/pages/[lang]/learn/[lesson].tsx +++ b/src/pages/[lang]/learn/[lesson].tsx @@ -4,6 +4,7 @@ import Header from 'src/components/Header'; import CustomHead from 'src/components/CustomHead'; import LearnFooter from 'src/components/LearnFooter'; import Step from 'src/components/Step'; +import LearnProgress from 'src/components/LearnProgress'; import { defaultLocale, locales } from 'src/localization'; import { Lesson } from 'src/types'; import lessons from 'src/data/lessons/index.json'; @@ -28,6 +29,7 @@ const PageLesson = ({ lesson }: PageLessonProps) => {
+
diff --git a/src/styles/globals.css b/src/styles/globals.css index 1dd260e7..7917b98d 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -16,6 +16,10 @@ } } +.hidden-scrollbar::-webkit-scrollbar { + display: none; +} + ::-webkit-scrollbar { @apply h-1 w-1; } From f865cbb9f797209d723b5ad95a83372ecd74ac64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Mon, 30 Jan 2023 21:41:23 +0300 Subject: [PATCH 04/62] 2.22.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9f841429..498bc7d9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "regexlearn", - "version": "2.21.3", + "version": "2.22.0", "author": { "name": "Aykut Kardaş", "email": "aykutkrds@gmail.com" From e5bb2a1a8129ee0b19923cc9e754ddad12c01cdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Wed, 1 Feb 2023 19:55:19 +0300 Subject: [PATCH 05/62] Update learn progress position --- src/components/LearnProgress.tsx | 33 ++++++++++++++++------------- src/pages/[lang]/learn/[lesson].tsx | 2 +- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/components/LearnProgress.tsx b/src/components/LearnProgress.tsx index 58e37f0e..ee55225d 100644 --- a/src/components/LearnProgress.tsx +++ b/src/components/LearnProgress.tsx @@ -30,27 +30,27 @@ const LearnProgress = () => { return (
@@ -64,33 +64,36 @@ const LearnProgress = () => { 'active-step text-green-400': step === index, '': lastStep >= index && step !== index, }, - 'step-item relative truncate max-w-[80%] flex items-center', + 'step-item relative truncate max-w-[80%] flex flex-row-reverse items-center', index !== lessonData.length - 1 && - "pb-10 after:content-[''] after:block after:w-[2px] after:h-6 after:bg-neutral-700 after:rounded-md after:left-[7px] after:top-6 after:absolute", + "pb-6 after:content-[''] after:block after:w-[2px] after:h-8 after:bg-neutral-700 after:rounded-md after:right-[7px] after:top-8 after:absolute", )} > {step === index && ( - + )} {lastStep >= index && step !== index && ( - + )} {lastStep < index && ( - + )} handleChangeStep(index)} attrs={{ - className: step === index ? 'text-emerald-400' : 'text-emerald-600', + className: clsx( + ' text-[10px] p-1 bg-emerald-400/20 rounded-lg', + step === index ? 'text-emerald-400' : 'text-emerald-600', + ), }} />
diff --git a/src/pages/[lang]/learn/[lesson].tsx b/src/pages/[lang]/learn/[lesson].tsx index 86ab2244..de752f70 100644 --- a/src/pages/[lang]/learn/[lesson].tsx +++ b/src/pages/[lang]/learn/[lesson].tsx @@ -27,7 +27,7 @@ const PageLesson = ({ lesson }: PageLessonProps) => { -
+
From d7719078fd8d10acd370853603dadd242840bfc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Wed, 1 Feb 2023 19:55:26 +0300 Subject: [PATCH 06/62] 2.22.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 498bc7d9..0fdca599 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "regexlearn", - "version": "2.22.0", + "version": "2.22.1", "author": { "name": "Aykut Kardaş", "email": "aykutkrds@gmail.com" From 9351d14d6eb93b3aec7bdc1af987fe960954d488 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Fri, 3 Feb 2023 13:55:57 +0300 Subject: [PATCH 07/62] Fix style (LessonBox) --- src/components/LessonBox.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/LessonBox.tsx b/src/components/LessonBox.tsx index 65b1c384..3c14dd04 100644 --- a/src/components/LessonBox.tsx +++ b/src/components/LessonBox.tsx @@ -48,10 +48,10 @@ const LessonBox = ({ data, lock, bgColor }: Props) => { return ( - +
Date: Fri, 3 Feb 2023 13:56:09 +0300 Subject: [PATCH 08/62] 2.22.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0fdca599..74880b71 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "regexlearn", - "version": "2.22.1", + "version": "2.22.2", "author": { "name": "Aykut Kardaş", "email": "aykutkrds@gmail.com" From 8f7e054bec62d5724d4d5c4f1f8659cefd831d8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Fri, 24 Feb 2023 12:39:37 +0300 Subject: [PATCH 09/62] chore: upgrade dependencies --- package.json | 26 +- yarn.lock | 1522 +++++++++++++++++++++++++++++--------------------- 2 files changed, 886 insertions(+), 662 deletions(-) diff --git a/package.json b/package.json index 74880b71..d93bf522 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ }, "license": "MIT", "dependencies": { - "@headlessui/react": "^1.6.6", + "@headlessui/react": "^1.7.11", "@use-it/event-listener": "^0.1.7", "axios": "^1.1.3", "canvas-confetti": "^1.4.0", @@ -24,24 +24,24 @@ "draft-js": "^0.11.7", "lodash.xor": "^4.5.0", "lookie": "^1.0.4", - "next": "12.2.2", + "next": "^13.2.1", "query-string": "^7.1.1", - "react": "18.2.0", - "react-dom": "18.2.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-hot-toast": "^2.4.0", - "react-icomoon": "^2.5.3", - "react-intl": "^6.0.5" + "react-icomoon": "^2.5.7", + "react-intl": "^6.2.10" }, "devDependencies": { "@tailwindcss/forms": "^0.5.3", "@types/draft-js": "^0.11.8", "@types/node": "^18.0.5", - "@types/react": "^18.0.15", - "autoprefixer": "^10.4.8", - "eslint": "7", - "eslint-config-next": "12.2.2", - "postcss": "^8.4.16", - "tailwindcss": "^3.1.8", - "typescript": "^4.5.5" + "@types/react": "^18.0.28", + "autoprefixer": "^10.4.13", + "eslint": "^8.34.0", + "eslint-config-next": "^13.2.1", + "postcss": "^8.4.21", + "tailwindcss": "^3.2.7", + "typescript": "^4.9.5" } } diff --git a/yarn.lock b/yarn.lock index 96255972..742eb6f5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,27 +2,6 @@ # yarn lockfile v1 -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/helper-validator-identifier@^7.15.7": - version "7.15.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" - integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== - -"@babel/highlight@^7.10.4": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" - integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== - dependencies: - "@babel/helper-validator-identifier" "^7.15.7" - chalk "^2.0.0" - js-tokens "^4.0.0" - "@babel/runtime-corejs3@^7.10.2": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.16.0.tgz#58a7fb00e6948508f12f53a303993e8b6e2f6c70" @@ -45,186 +24,193 @@ dependencies: regenerator-runtime "^0.13.4" -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== +"@eslint/eslintrc@^1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" + integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== dependencies: ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.19.0" + ignore "^5.2.0" import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" + js-yaml "^4.1.0" + minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@formatjs/ecma402-abstract@1.11.8": - version "1.11.8" - resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.8.tgz#f4015dfb6a837369d94c6ba82455c609e45bce20" - integrity sha512-fgLqyWlwmTEuqV/TSLEL/t9JOmHNLFvCdgzXB0jc2w+WOItPCOJ1T0eyN6fQBQKRPfSqqNlu+kWj7ijcOVTVVQ== +"@formatjs/ecma402-abstract@1.14.3": + version "1.14.3" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.14.3.tgz#6428f243538a11126180d121ce8d4b2f17465738" + integrity sha512-SlsbRC/RX+/zg4AApWIFNDdkLtFbkq3LNoZWXZCE/nHVKqoIJyaoQyge/I0Y38vLxowUn9KTtXgusLD91+orbg== dependencies: - "@formatjs/intl-localematcher" "0.2.28" - tslib "2.4.0" + "@formatjs/intl-localematcher" "0.2.32" + tslib "^2.4.0" -"@formatjs/fast-memoize@1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-1.2.4.tgz#4b5ddce9eb7803ff0bd4052387672151a8b7f8a0" - integrity sha512-9ARYoLR8AEzXvj2nYrOVHY/h1dDMDWGTnKDLXSISF1uoPakSmfcZuSqjiqZX2wRkEUimPxdwTu/agyozBtZRHA== +"@formatjs/fast-memoize@1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-1.2.8.tgz#425a69f783005f69e11f9e38a7f87f8822d330c6" + integrity sha512-PemNUObyoIZcqdQ1ixTPugzAzhEj7j6AHIyrq/qR6x5BFTvOQeXHYsVZUqBEFduAIscUaDfou+U+xTqOiunJ3Q== dependencies: - tslib "2.4.0" + tslib "^2.4.0" -"@formatjs/icu-messageformat-parser@2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.4.tgz#f1e32b9937f151c1dd5c30536ce3e920b7f23813" - integrity sha512-3PqMvKWV1oyok0BuiXUAHIaotdhdTJw6OICqCZbfUgKT+ZRwRWO4IlCgvXJeCITaKS5p+PY0XXKjf/vUyIpWjQ== +"@formatjs/icu-messageformat-parser@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.3.0.tgz#8e8fd577c3e39454ef14bba4963f2e1d5f2cc46c" + integrity sha512-xqtlqYAbfJDF4b6e4O828LBNOWXrFcuYadqAbYORlDRwhyJ2bH+xpUBPldZbzRGUN2mxlZ4Ykhm7jvERtmI8NQ== dependencies: - "@formatjs/ecma402-abstract" "1.11.8" - "@formatjs/icu-skeleton-parser" "1.3.10" - tslib "2.4.0" + "@formatjs/ecma402-abstract" "1.14.3" + "@formatjs/icu-skeleton-parser" "1.3.18" + tslib "^2.4.0" -"@formatjs/icu-skeleton-parser@1.3.10": - version "1.3.10" - resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.10.tgz#2f504e56ac80137ee2baad55c7fa0b5dc7f4e4df" - integrity sha512-kXJmtLDqFF5aLTf8IxdJXnhrIX1Qb4Qp3a9jqRecGDYfzOa9hMhi9U0nKyhrJJ4cXxBzptcgb+LWkyeHL6nlBQ== +"@formatjs/icu-skeleton-parser@1.3.18": + version "1.3.18" + resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.18.tgz#7aed3d60e718c8ad6b0e64820be44daa1e29eeeb" + integrity sha512-ND1ZkZfmLPcHjAH1sVpkpQxA+QYfOX3py3SjKWMUVGDow18gZ0WPqz3F+pJLYQMpS2LnnQ5zYR2jPVYTbRwMpg== dependencies: - "@formatjs/ecma402-abstract" "1.11.8" - tslib "2.4.0" + "@formatjs/ecma402-abstract" "1.14.3" + tslib "^2.4.0" -"@formatjs/intl-displaynames@6.0.3": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-6.0.3.tgz#e648a91bccd9fb21519090eaafece3be9d15f480" - integrity sha512-Mxh6W1VOlmiEvO/QPBrBQHlXrIn5VxjJWyyEI0V7ZHNGl0ee8AjSlq7vIJG8GodRJqGUuutF6N3OB/6qFv0YWg== +"@formatjs/intl-displaynames@6.2.6": + version "6.2.6" + resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-6.2.6.tgz#6bc02fe0bf6571391aac0e01e74ecbf38542ff32" + integrity sha512-scf5AQTk9EjpvPhboo5sizVOvidTdMOnajv9z+0cejvl7JNl9bl/aMrNBgC72UH+bP3l45usPUKAGskV6sNIrA== dependencies: - "@formatjs/ecma402-abstract" "1.11.8" - "@formatjs/intl-localematcher" "0.2.28" - tslib "2.4.0" + "@formatjs/ecma402-abstract" "1.14.3" + "@formatjs/intl-localematcher" "0.2.32" + tslib "^2.4.0" -"@formatjs/intl-listformat@7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-7.0.3.tgz#8627969b77849559d148bc9536d0884c2271e6de" - integrity sha512-ampNLRGZl/08epHa3i5sRmcHGLneC6JrknexbbgnexYFNSmJ6AbL/dCzgrQzw2Efl+5AZK7UbNFxcDYY3RePvw== +"@formatjs/intl-listformat@7.1.9": + version "7.1.9" + resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-7.1.9.tgz#0c2ce67b610054f215dd2635a6da7da308cfbe3d" + integrity sha512-5YikxwRqRXTVWVujhswDOTCq6gs+m9IcNbNZLa6FLtyBStAjEsuE2vAU+lPsbz9ZTST57D5fodjIh2JXT6sMWQ== + dependencies: + "@formatjs/ecma402-abstract" "1.14.3" + "@formatjs/intl-localematcher" "0.2.32" + tslib "^2.4.0" + +"@formatjs/intl-localematcher@0.2.32": + version "0.2.32" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.2.32.tgz#00d4d307cd7d514b298e15a11a369b86c8933ec1" + integrity sha512-k/MEBstff4sttohyEpXxCmC3MqbUn9VvHGlZ8fauLzkbwXmVrEeyzS+4uhrvAk9DWU9/7otYWxyDox4nT/KVLQ== dependencies: - "@formatjs/ecma402-abstract" "1.11.8" - "@formatjs/intl-localematcher" "0.2.28" - tslib "2.4.0" + tslib "^2.4.0" -"@formatjs/intl-localematcher@0.2.28": - version "0.2.28" - resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.2.28.tgz#412ea7fefbfc7ed33cd6b43aa304fc14d816e564" - integrity sha512-FLsc6Gifs1np/8HnCn/7Q+lHMmenrD5fuDhRT82yj0gi9O19kfaFwjQUw1gZsyILuRyT93GuzdifHj7TKRhBcw== +"@formatjs/intl@2.6.7": + version "2.6.7" + resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-2.6.7.tgz#a64cf37d01c3d09ce18cf9390982534655cae14b" + integrity sha512-9FvEJfUMzlmP5ZBK3EE0928kVsZmD5aeWXg+faP8+mKIvG3c0hkLEXQ2MiUrXQt4rsEzOPbYVtBdthzSM0e2fw== + dependencies: + "@formatjs/ecma402-abstract" "1.14.3" + "@formatjs/fast-memoize" "1.2.8" + "@formatjs/icu-messageformat-parser" "2.3.0" + "@formatjs/intl-displaynames" "6.2.6" + "@formatjs/intl-listformat" "7.1.9" + intl-messageformat "10.3.1" + tslib "^2.4.0" + +"@headlessui/react@^1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.7.11.tgz#1cc5750226abe5af2c94f72e975c0c8d2f5cc5a6" + integrity sha512-EaDbVgcyiylhtskZZf4Qb/JiiByY7cYbd0qgZ9xm2pm2X7hKojG0P4TaQYKgPOV3vojPhd/pZyQh3nmRkkcSyw== dependencies: - tslib "2.4.0" + client-only "^0.0.1" -"@formatjs/intl@2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-2.3.1.tgz#eccd6d03e4db18c256181f235b1d0a7f7aaebf5a" - integrity sha512-f06qZ/ukpeN24gc01qFjh3P+r3FU/ikY4yG+fDJu6dPNvpUQzDy98lYogA1dr6ig2UtrnoEk3xncyFPL1e9cZw== - dependencies: - "@formatjs/ecma402-abstract" "1.11.8" - "@formatjs/fast-memoize" "1.2.4" - "@formatjs/icu-messageformat-parser" "2.1.4" - "@formatjs/intl-displaynames" "6.0.3" - "@formatjs/intl-listformat" "7.0.3" - intl-messageformat "10.1.1" - tslib "2.4.0" - -"@headlessui/react@^1.6.6": - version "1.6.6" - resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.6.6.tgz#3073c066b85535c9d28783da0a4d9288b5354d0c" - integrity sha512-MFJtmj9Xh/hhBMhLccGbBoSk+sk61BlP6sJe4uQcVMtXZhCgGqd2GyIQzzmsdPdTEWGSF434CBi8mnhR6um46Q== - -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== - dependencies: - "@humanwhocodes/object-schema" "^1.2.0" +"@humanwhocodes/config-array@^0.11.8": + version "0.11.8" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" + integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" - minimatch "^3.0.4" + minimatch "^3.0.5" -"@humanwhocodes/object-schema@^1.2.0": +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -"@next/env@12.2.2": - version "12.2.2" - resolved "https://registry.yarnpkg.com/@next/env/-/env-12.2.2.tgz#cc1a0a445bd254499e30f632968c03192455f4cc" - integrity sha512-BqDwE4gDl1F608TpnNxZqrCn6g48MBjvmWFEmeX5wEXDXh3IkAOw6ASKUgjT8H4OUePYFqghDFUss5ZhnbOUjw== +"@next/env@13.2.1": + version "13.2.1" + resolved "https://registry.yarnpkg.com/@next/env/-/env-13.2.1.tgz#082d42cfc0c794e9185d7b4133d71440ba2e795d" + integrity sha512-Hq+6QZ6kgmloCg8Kgrix+4F0HtvLqVK3FZAnlAoS0eonaDemHe1Km4kwjSWRE3JNpJNcKxFHF+jsZrYo0SxWoQ== -"@next/eslint-plugin-next@12.2.2": - version "12.2.2" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.2.2.tgz#b4a22c06b6454068b54cc44502168d90fbb29a6d" - integrity sha512-XOi0WzJhGH3Lk51SkSu9eZxF+IY1ZZhWcJTIGBycAbWU877IQa6+6KxMATWCOs7c+bmp6Sd8KywXJaDRxzu0JA== +"@next/eslint-plugin-next@13.2.1": + version "13.2.1" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-13.2.1.tgz#58dea4d53c0adfc59c10195f51eb8d3575fce414" + integrity sha512-r0i5rcO6SMAZtqiGarUVMr3k256X0R0j6pEkKg4PxqUW+hG0qgMxRVAJsuoRG5OBFkCOlSfWZJ0mP9fQdCcyNg== dependencies: glob "7.1.7" -"@next/swc-android-arm-eabi@12.2.2": - version "12.2.2" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.2.tgz#f6c4111e6371f73af6bf80c9accb3d96850a92cd" - integrity sha512-VHjuCHeq9qCprUZbsRxxM/VqSW8MmsUtqB5nEpGEgUNnQi/BTm/2aK8tl7R4D0twGKRh6g1AAeFuWtXzk9Z/vQ== - -"@next/swc-android-arm64@12.2.2": - version "12.2.2" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.2.2.tgz#b69de59c51e631a7600439e7a8993d6e82f3369e" - integrity sha512-v5EYzXUOSv0r9mO/2PX6mOcF53k8ndlu9yeFHVAWW1Dhw2jaJcvTRcCAwYYN8Q3tDg0nH3NbEltJDLKmcJOuVA== - -"@next/swc-darwin-arm64@12.2.2": - version "12.2.2" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.2.tgz#80157c91668eff95b72d052428c353eab0fc4c50" - integrity sha512-JCoGySHKGt+YBk7xRTFGx1QjrnCcwYxIo3yGepcOq64MoiocTM3yllQWeOAJU2/k9MH0+B5E9WUSme4rOCBbpA== - -"@next/swc-darwin-x64@12.2.2": - version "12.2.2" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.2.tgz#12be2f58e676fccff3d48a62921b9927ed295133" - integrity sha512-dztDtvfkhUqiqpXvrWVccfGhLe44yQ5tQ7B4tBfnsOR6vxzI9DNPHTlEOgRN9qDqTAcFyPxvg86mn4l8bB9Jcw== - -"@next/swc-freebsd-x64@12.2.2": - version "12.2.2" - resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.2.tgz#de1363431a49059f1efb8c0f86ce6a79c53b3a95" - integrity sha512-JUnXB+2xfxqsAvhFLPJpU1NeyDsvJrKoOjpV7g3Dxbno2Riu4tDKn3kKF886yleAuD/1qNTUCpqubTvbbT2VoA== - -"@next/swc-linux-arm-gnueabihf@12.2.2": - version "12.2.2" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.2.tgz#d5b8e0d1bb55bbd9db4d2fec018217471dc8b9e6" - integrity sha512-XeYC/qqPLz58R4pjkb+x8sUUxuGLnx9QruC7/IGkK68yW4G17PHwKI/1njFYVfXTXUukpWjcfBuauWwxp9ke7Q== - -"@next/swc-linux-arm64-gnu@12.2.2": - version "12.2.2" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.2.tgz#3bc75984e1d5ec8f59eb53702cc382d8e1be2061" - integrity sha512-d6jT8xgfKYFkzR7J0OHo2D+kFvY/6W8qEo6/hmdrTt6AKAqxs//rbbcdoyn3YQq1x6FVUUd39zzpezZntg9Naw== - -"@next/swc-linux-arm64-musl@12.2.2": - version "12.2.2" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.2.tgz#270db73e07a18d999f61e79a917943fa5bc1ef56" - integrity sha512-rIZRFxI9N/502auJT1i7coas0HTHUM+HaXMyJiCpnY8Rimbo0495ir24tzzHo3nQqJwcflcPTwEh/DV17sdv9A== - -"@next/swc-linux-x64-gnu@12.2.2": - version "12.2.2" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.2.tgz#e6c72fa20478552e898c434f4d4c0c5e89d2ea78" - integrity sha512-ir1vNadlUDj7eQk15AvfhG5BjVizuCHks9uZwBfUgT5jyeDCeRvaDCo1+Q6+0CLOAnYDR/nqSCvBgzG2UdFh9A== - -"@next/swc-linux-x64-musl@12.2.2": - version "12.2.2" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.2.tgz#b9ef9efe2c401839cdefa5e70402386aafdce15a" - integrity sha512-bte5n2GzLN3O8JdSFYWZzMgEgDHZmRz5wiispiiDssj4ik3l8E7wq/czNi8RmIF+ioj2sYVokUNa/ekLzrESWw== - -"@next/swc-win32-arm64-msvc@12.2.2": - version "12.2.2" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.2.tgz#18fa7ec7248da3a7926a0601d9ececc53ac83157" - integrity sha512-ZUGCmcDmdPVSAlwJ/aD+1F9lYW8vttseiv4n2+VCDv5JloxiX9aY32kYZaJJO7hmTLNrprvXkb4OvNuHdN22Jg== - -"@next/swc-win32-ia32-msvc@12.2.2": - version "12.2.2" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.2.tgz#54936e84f4a219441d051940354da7cd3eafbb4f" - integrity sha512-v7ykeEDbr9eXiblGSZiEYYkWoig6sRhAbLKHUHQtk8vEWWVEqeXFcxmw6LRrKu5rCN1DY357UlYWToCGPQPCRA== - -"@next/swc-win32-x64-msvc@12.2.2": - version "12.2.2" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.2.tgz#7460be700a60d75816f01109400b51fe929d7e89" - integrity sha512-2D2iinWUL6xx8D9LYVZ5qi7FP6uLAoWymt8m8aaG2Ld/Ka8/k723fJfiklfuAcwOxfufPJI+nRbT5VcgHGzHAQ== +"@next/swc-android-arm-eabi@13.2.1": + version "13.2.1" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.2.1.tgz#67f2580fbbe05ee006220688972c5e3a555fc741" + integrity sha512-Yua7mUpEd1wzIT6Jjl3dpRizIfGp9NR4F2xeRuQv+ae+SDI1Em2WyM9m46UL+oeW5GpMiEHoaBagr47RScZFmQ== + +"@next/swc-android-arm64@13.2.1": + version "13.2.1" + resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.2.1.tgz#460a02b69eb23bb5f402266bcea9cadae59415c1" + integrity sha512-Bifcr2f6VwInOdq1uH/9lp8fH7Nf7XGkIx4XceVd32LPJqG2c6FZU8ZRBvTdhxzXVpt5TPtuXhOP4Ij9UPqsVw== + +"@next/swc-darwin-arm64@13.2.1": + version "13.2.1" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.2.1.tgz#8b8530ff417802027471aee2419f78a58a863ccb" + integrity sha512-gvqm+fGMYxAkwBapH0Vvng5yrb6HTkIvZfY4oEdwwYrwuLdkjqnJygCMgpNqIFmAHSXgtlWxfYv1VC8sjN81Kw== + +"@next/swc-darwin-x64@13.2.1": + version "13.2.1" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.2.1.tgz#80aebb3329a1e4568a28de1ee177780b3d50330c" + integrity sha512-HGqVqmaZWj6zomqOZUVbO5NhlABL0iIaxTmd0O5B0MoMa5zpDGoaHSG+fxgcWMXcGcxmUNchv1NfNOYiTKoHOg== + +"@next/swc-freebsd-x64@13.2.1": + version "13.2.1" + resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.2.1.tgz#250ea2ab7e1734f22d11c677c463fab9ac33a516" + integrity sha512-N/a4JarAq+E+g+9K2ywJUmDIgU2xs2nA+BBldH0oq4zYJMRiUhL0iaN9G4e72VmGOJ61L/3W6VN8RIUOwTLoqQ== + +"@next/swc-linux-arm-gnueabihf@13.2.1": + version "13.2.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.2.1.tgz#fe6bb29ed348a5f8ecae3740df22a8d8130c474a" + integrity sha512-WaFoerF/eRbhbE57TaIGJXbQAERADZ/RZ45u6qox9beb5xnWsyYgzX+WuN7Tkhyvga0/aMuVYFzS9CEay7D+bw== + +"@next/swc-linux-arm64-gnu@13.2.1": + version "13.2.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.2.1.tgz#4781b927fc5e421f3cea2b29e5d38e5e4837b198" + integrity sha512-R+Jhc1/RJTnncE9fkePboHDNOCm1WJ8daanWbjKhfPySMyeniKYRwGn5SLYW3S8YlRS0QVdZaaszDSZWgUcsmA== + +"@next/swc-linux-arm64-musl@13.2.1": + version "13.2.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.2.1.tgz#c2ba0a121b0255ba62450916bc70e6d0e26cbc98" + integrity sha512-oI1UfZPidGAVddlL2eOTmfsuKV9EaT1aktIzVIxIAgxzQSdwsV371gU3G55ggkurzfdlgF3GThFePDWF0d8dmw== + +"@next/swc-linux-x64-gnu@13.2.1": + version "13.2.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.2.1.tgz#573c220f8b087e5d131d1fba58d3e1a670b220ad" + integrity sha512-PCygPwrQmS+7WUuAWWioWMZCzZm4PG91lfRxToLDg7yIm/3YfAw5N2EK2TaM9pzlWdvHQAqRMX/oLvv027xUiA== + +"@next/swc-linux-x64-musl@13.2.1": + version "13.2.1" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.2.1.tgz#950b5bb920b322ca7b447efbd12a9c7a10c3a642" + integrity sha512-sUAKxo7CFZYGHNxheGh9nIBElLYBM6md/liEGfOTwh/xna4/GTTcmkGWkF7PdnvaYNgcPIQgHIMYiAa6yBKAVw== + +"@next/swc-win32-arm64-msvc@13.2.1": + version "13.2.1" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.2.1.tgz#dbff3c4f5a3812a7059dac05804148a0f98682db" + integrity sha512-qDmyEjDBpl/vBXxuOOKKWmPQOcARcZIMach1s7kjzaien0SySut/PHRlj56sosa81Wt4hTGhfhZ1R7g1n7+B8w== + +"@next/swc-win32-ia32-msvc@13.2.1": + version "13.2.1" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.2.1.tgz#7d2c17be7b8d9963984f5c15cc2588127101f620" + integrity sha512-2joqFQ81ZYPg6DcikIzQn3DgjKglNhPAozx6dL5sCNkr1CPMD0YIkJgT3CnYyMHQ04Qi3Npv0XX3MD6LJO8OCA== + +"@next/swc-win32-x64-msvc@13.2.1": + version "13.2.1" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.2.1.tgz#09713c6a925461f414e89422851326d1625bd4d2" + integrity sha512-r3+0fSaIZT6N237iMzwUhfNwjhAFvXjqB+4iuW+wcpxW+LHm1g/IoxN8eSRcb8jPItC86JxjAxpke0QL97qd6g== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -239,7 +225,7 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.3": +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== @@ -247,15 +233,27 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@pkgr/utils@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.3.1.tgz#0a9b06ffddee364d6642b3cd562ca76f55b34a03" + integrity sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw== + dependencies: + cross-spawn "^7.0.3" + is-glob "^4.0.3" + open "^8.4.0" + picocolors "^1.0.0" + tiny-glob "^0.2.9" + tslib "^2.4.0" + "@rushstack/eslint-patch@^1.1.3": version "1.1.4" resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz#0c8b74c50f29ee44f423f7416829c0bf8bb5eb27" integrity sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA== -"@swc/helpers@0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.2.tgz#ed1f6997ffbc22396665d9ba74e2a5c0a2d782f8" - integrity sha512-556Az0VX7WR6UdoTn4htt/l3zPQ7bsQWK+HqdG4swV7beUCxo/BqmvbOpUkTIm/9ih86LIf1qsUnywNL3obGHw== +"@swc/helpers@0.4.14": + version "0.4.14" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" + integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== dependencies: tslib "^2.4.0" @@ -297,7 +295,7 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== -"@types/react@*", "@types/react@16 || 17 || 18", "@types/react@^18.0.15": +"@types/react@*", "@types/react@16 || 17 || 18": version "18.0.15" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.15.tgz#d355644c26832dc27f3e6cbf0c4f4603fc4ab7fe" integrity sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow== @@ -306,53 +304,62 @@ "@types/scheduler" "*" csstype "^3.0.2" +"@types/react@^18.0.28": + version "18.0.28" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.28.tgz#accaeb8b86f4908057ad629a26635fe641480065" + integrity sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + "@types/scheduler@*": version "0.16.2" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== -"@typescript-eslint/parser@^5.21.0": - version "5.30.6" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.30.6.tgz#add440db038fa9d777e4ebdaf66da9e7fb7abe92" - integrity sha512-gfF9lZjT0p2ZSdxO70Xbw8w9sPPJGfAdjK7WikEjB3fcUI/yr9maUVEdqigBjKincUYNKOmf7QBMiTf719kbrA== +"@typescript-eslint/parser@^5.42.0": + version "5.53.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.53.0.tgz#a1f2b9ae73b83181098747e96683f1b249ecab52" + integrity sha512-MKBw9i0DLYlmdOb3Oq/526+al20AJZpANdT6Ct9ffxcV8nKCHz63t/S0IhlTFNsBIHJv+GY5SFJ0XfqVeydQrQ== dependencies: - "@typescript-eslint/scope-manager" "5.30.6" - "@typescript-eslint/types" "5.30.6" - "@typescript-eslint/typescript-estree" "5.30.6" + "@typescript-eslint/scope-manager" "5.53.0" + "@typescript-eslint/types" "5.53.0" + "@typescript-eslint/typescript-estree" "5.53.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.30.6": - version "5.30.6" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.30.6.tgz#ce1b49ff5ce47f55518d63dbe8fc9181ddbd1a33" - integrity sha512-Hkq5PhLgtVoW1obkqYH0i4iELctEKixkhWLPTYs55doGUKCASvkjOXOd/pisVeLdO24ZX9D6yymJ/twqpJiG3g== +"@typescript-eslint/scope-manager@5.53.0": + version "5.53.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.53.0.tgz#42b54f280e33c82939275a42649701024f3fafef" + integrity sha512-Opy3dqNsp/9kBBeCPhkCNR7fmdSQqA+47r21hr9a14Bx0xnkElEQmhoHga+VoaoQ6uDHjDKmQPIYcUcKJifS7w== dependencies: - "@typescript-eslint/types" "5.30.6" - "@typescript-eslint/visitor-keys" "5.30.6" + "@typescript-eslint/types" "5.53.0" + "@typescript-eslint/visitor-keys" "5.53.0" -"@typescript-eslint/types@5.30.6": - version "5.30.6" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.6.tgz#86369d0a7af8c67024115ac1da3e8fb2d38907e1" - integrity sha512-HdnP8HioL1F7CwVmT4RaaMX57RrfqsOMclZc08wGMiDYJBsLGBM7JwXM4cZJmbWLzIR/pXg1kkrBBVpxTOwfUg== +"@typescript-eslint/types@5.53.0": + version "5.53.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.53.0.tgz#f79eca62b97e518ee124086a21a24f3be267026f" + integrity sha512-5kcDL9ZUIP756K6+QOAfPkigJmCPHcLN7Zjdz76lQWWDdzfOhZDTj1irs6gPBKiXx5/6O3L0+AvupAut3z7D2A== -"@typescript-eslint/typescript-estree@5.30.6": - version "5.30.6" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.6.tgz#a84a0d6a486f9b54042da1de3d671a2c9f14484e" - integrity sha512-Z7TgPoeYUm06smfEfYF0RBkpF8csMyVnqQbLYiGgmUSTaSXTP57bt8f0UFXstbGxKIreTwQCujtaH0LY9w9B+A== +"@typescript-eslint/typescript-estree@5.53.0": + version "5.53.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.53.0.tgz#bc651dc28cf18ab248ecd18a4c886c744aebd690" + integrity sha512-eKmipH7QyScpHSkhbptBBYh9v8FxtngLquq292YTEQ1pxVs39yFBlLC1xeIZcPPz1RWGqb7YgERJRGkjw8ZV7w== dependencies: - "@typescript-eslint/types" "5.30.6" - "@typescript-eslint/visitor-keys" "5.30.6" + "@typescript-eslint/types" "5.53.0" + "@typescript-eslint/visitor-keys" "5.53.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@5.30.6": - version "5.30.6" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.6.tgz#94dd10bb481c8083378d24de1742a14b38a2678c" - integrity sha512-41OiCjdL2mCaSDi2SvYbzFLlqqlm5v1ZW9Ym55wXKL/Rx6OOB1IbuFGo71Fj6Xy90gJDFTlgOS+vbmtGHPTQQA== +"@typescript-eslint/visitor-keys@5.53.0": + version "5.53.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.53.0.tgz#8a5126623937cdd909c30d8fa72f79fa56cc1a9f" + integrity sha512-JqNLnX3leaHFZEN0gCh81sIvgrp/2GOACZNgO4+Tkf64u51kTpAyWFOY8XHx8XuXr3N2C9zgPPHtcpMg6z1g0w== dependencies: - "@typescript-eslint/types" "5.30.6" + "@typescript-eslint/types" "5.53.0" eslint-visitor-keys "^3.3.0" "@use-it/event-listener@^0.1.7": @@ -360,7 +367,7 @@ resolved "https://registry.yarnpkg.com/@use-it/event-listener/-/event-listener-0.1.7.tgz#443a9b6df87f2f2961b74d42997ce723a7078623" integrity sha512-hgfExDzUU9uTRTPDCpw2s9jWTxcxmpJya3fK5ADpf5VDpSy8WYwY/kh28XE0tUcbsljeP8wfan48QvAQTSSa3Q== -acorn-jsx@^5.3.1: +acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== @@ -379,11 +386,16 @@ acorn-walk@^7.0.0: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^7.0.0, acorn@^7.4.0: +acorn@^7.0.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.8.0: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -394,34 +406,12 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1: - version "8.7.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.7.1.tgz#52be6f1736b076074798124293618f132ad07a7e" - integrity sha512-gPpOObTO1QjbnN1sVMjJcp1TF9nggMfO4MBR5uQl6ZVTOaEPq5i4oq/6R9q2alMMPB3eg53wFv1RuJBLuxf3Hw== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: +ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -441,12 +431,10 @@ arg@^5.0.2: resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== aria-query@^4.2.2: version "4.2.2" @@ -478,6 +466,17 @@ array-includes@^3.1.5: get-intrinsic "^1.1.1" is-string "^1.0.7" +array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + is-string "^1.0.7" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" @@ -492,16 +491,27 @@ array.prototype.flat@^1.2.5: define-properties "^1.1.3" es-abstract "^1.19.0" -array.prototype.flatmap@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f" - integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg== +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" +array.prototype.tosorted@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" + integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.1.3" + asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" @@ -512,28 +522,28 @@ ast-types-flow@^0.0.7: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -autoprefixer@^10.4.8: - version "10.4.8" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.8.tgz#92c7a0199e1cfb2ad5d9427bd585a3d75895b9e5" - integrity sha512-75Jr6Q/XpTqEf6D2ltS5uMewJIx5irCU1oBYJrWjFenq/m12WRRrz6g15L1EIoYvPLXTbEry7rDOwrcYNj77xw== +autoprefixer@^10.4.13: + version "10.4.13" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.13.tgz#b5136b59930209a321e9fa3dca2e7c4d223e83a8" + integrity sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg== dependencies: - browserslist "^4.21.3" - caniuse-lite "^1.0.30001373" + browserslist "^4.21.4" + caniuse-lite "^1.0.30001426" fraction.js "^4.2.0" normalize-range "^0.1.2" picocolors "^1.0.0" postcss-value-parser "^4.2.0" +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + axe-core@^4.4.2: version "4.4.3" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.3.tgz#11c74d23d5013c0fa5d183796729bc3482bd2f6f" @@ -571,22 +581,22 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^3.0.1, braces@~3.0.2: +braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" -browserslist@^4.21.3: - version "4.21.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a" - integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== +browserslist@^4.21.4: + version "4.21.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== dependencies: - caniuse-lite "^1.0.30001370" - electron-to-chromium "^1.4.202" - node-releases "^2.0.6" - update-browserslist-db "^1.0.5" + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" @@ -606,30 +616,16 @@ camelcase-css@^2.0.1: resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== -caniuse-lite@^1.0.30001332: - version "1.0.30001367" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001367.tgz#2b97fe472e8fa29c78c5970615d7cd2ee414108a" - integrity sha512-XDgbeOHfifWV3GEES2B8rtsrADx4Jf+juKX2SICJcaUhjYBO3bR96kvEIHa15VU6ohtOhBZuPGGYGbXMRn0NCw== - -caniuse-lite@^1.0.30001370, caniuse-lite@^1.0.30001373: - version "1.0.30001387" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001387.tgz#90d2b9bdfcc3ab9a5b9addee00a25ef86c9e2e1e" - integrity sha512-fKDH0F1KOJvR+mWSOvhj8lVRr/Q/mc5u5nabU2vi1/sgvlSqEsE8dOq0Hy/BqVbDkCYQPRRHB1WRjW6PGB/7PA== +caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001426, caniuse-lite@^1.0.30001449: + version "1.0.30001457" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz#6af34bb5d720074e2099432aa522c21555a18301" + integrity sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA== canvas-confetti@^1.4.0: version "1.5.1" resolved "https://registry.yarnpkg.com/canvas-confetti/-/canvas-confetti-1.5.1.tgz#bf5b8622ef3bcd347378a972fc4194a89cfe0c9b" integrity sha512-Ncz+oZJP6OvY7ti4E1slxVlyAV/3g7H7oQtcCDXgwGgARxPnwYY9PW5Oe+I8uvspYNtuHviAdgA0LfcKFWJfpg== -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chalk@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -653,18 +649,16 @@ chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" +client-only@0.0.1, client-only@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" + integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== + clsx@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -672,11 +666,6 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - color-name@^1.1.4, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" @@ -718,7 +707,7 @@ cross-fetch@^3.0.4: dependencies: node-fetch "2.6.1" -cross-spawn@^7.0.2: +cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -756,14 +745,14 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.0.1, debug@^4.1.1: +debug@^4.1.1: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: ms "2.1.2" -debug@^4.3.4: +debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -780,6 +769,11 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -854,27 +848,23 @@ draft-js@^0.11.7: immutable "~3.7.4" object-assign "^4.1.1" -electron-to-chromium@^1.4.202: - version "1.4.237" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.237.tgz#c695c5fedc3bb48f04ba1b39470c5aef2aaafd84" - integrity sha512-vxVyGJcsgArNOVUJcXm+7iY3PJAfmSapEszQD1HbyPLl0qoCmNQ1o/EX3RI7Et5/88In9oLxX3SGF8J3orkUgA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +electron-to-chromium@^1.4.284: + version "1.4.310" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.310.tgz#cb85dc8ceac536e99b20a364d7ab00ea35168f9e" + integrity sha512-/xlATgfwkm5uDDwLw5nt/MNEf7c1oazLURMZLy39vOioGYyYzLWIDT8fZMJak6qTiAJ7udFTy7JG7ziyjNutiA== emoji-regex@^9.2.2: version "9.2.2" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== +enhanced-resolve@^5.10.0: + version "5.12.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" + integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== dependencies: - ansi-colors "^4.1.1" + graceful-fs "^4.2.4" + tapable "^2.2.0" es-abstract@^1.19.0, es-abstract@^1.19.1: version "1.19.1" @@ -902,7 +892,7 @@ es-abstract@^1.19.0, es-abstract@^1.19.1: string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.1" -es-abstract@^1.19.2, es-abstract@^1.19.5: +es-abstract@^1.19.5: version "1.20.1" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== @@ -931,6 +921,54 @@ es-abstract@^1.19.2, es-abstract@^1.19.5: string.prototype.trimstart "^1.0.5" unbox-primitive "^1.0.2" +es-abstract@^1.20.4: + version "1.21.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6" + integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.4" + is-array-buffer "^3.0.1" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.2" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + es-shim-unscopables@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" @@ -952,29 +990,24 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-next@12.2.2: - version "12.2.2" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-12.2.2.tgz#4bb996026e118071849bc4011283a160ad5bde46" - integrity sha512-oJhWBLC4wDYYUFv/5APbjHUFd0QRFCojMdj/QnMoOEktmeTvwnnoA8F8uaXs0fQgsaTK0tbUxBRv9/Y4/rpxOA== +eslint-config-next@^13.2.1: + version "13.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-13.2.1.tgz#644fb3496b832bc1e32f2c57cce1ec3eeb7bb7a1" + integrity sha512-2GAx7EjSiCzJN6H2L/v1kbYrNiwQxzkyjy6eWSjuhAKt+P6d3nVNHGy9mON8ZcYd72w/M8kyMjm4UB9cvijgrw== dependencies: - "@next/eslint-plugin-next" "12.2.2" + "@next/eslint-plugin-next" "13.2.1" "@rushstack/eslint-patch" "^1.1.3" - "@typescript-eslint/parser" "^5.21.0" + "@typescript-eslint/parser" "^5.42.0" eslint-import-resolver-node "^0.3.6" - eslint-import-resolver-typescript "^2.7.1" + eslint-import-resolver-typescript "^3.5.2" eslint-plugin-import "^2.26.0" eslint-plugin-jsx-a11y "^6.5.1" - eslint-plugin-react "^7.29.4" + eslint-plugin-react "^7.31.7" eslint-plugin-react-hooks "^4.5.0" eslint-import-resolver-node@^0.3.6: @@ -985,16 +1018,18 @@ eslint-import-resolver-node@^0.3.6: debug "^3.2.7" resolve "^1.20.0" -eslint-import-resolver-typescript@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz#a90a4a1c80da8d632df25994c4c5fdcdd02b8751" - integrity sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ== +eslint-import-resolver-typescript@^3.5.2: + version "3.5.3" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.3.tgz#db5ed9e906651b7a59dd84870aaef0e78c663a05" + integrity sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ== dependencies: debug "^4.3.4" - glob "^7.2.0" + enhanced-resolve "^5.10.0" + get-tsconfig "^4.2.0" + globby "^13.1.2" + is-core-module "^2.10.0" is-glob "^4.0.3" - resolve "^1.22.0" - tsconfig-paths "^3.14.1" + synckit "^0.8.4" eslint-module-utils@^2.7.3: version "2.7.3" @@ -1047,45 +1082,41 @@ eslint-plugin-react-hooks@^4.5.0: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== -eslint-plugin-react@^7.29.4: - version "7.30.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz#2be4ab23ce09b5949c6631413ba64b2810fd3e22" - integrity sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg== +eslint-plugin-react@^7.31.7: + version "7.32.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10" + integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg== dependencies: - array-includes "^3.1.5" - array.prototype.flatmap "^1.3.0" + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + array.prototype.tosorted "^1.1.1" doctrine "^2.1.0" estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" - object.entries "^1.1.5" - object.fromentries "^2.0.5" - object.hasown "^1.1.1" - object.values "^1.1.5" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + object.hasown "^1.1.2" + object.values "^1.1.6" prop-types "^15.8.1" - resolve "^2.0.0-next.3" + resolve "^2.0.0-next.4" semver "^6.3.0" - string.prototype.matchall "^4.0.7" + string.prototype.matchall "^4.0.8" -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== dependencies: esrecurse "^4.3.0" - estraverse "^4.1.1" + estraverse "^5.2.0" -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + eslint-visitor-keys "^2.0.0" eslint-visitor-keys@^2.0.0: version "2.1.0" @@ -1097,65 +1128,59 @@ eslint-visitor-keys@^3.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint@7: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== +eslint@^8.34.0: + version "8.34.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.34.0.tgz#fe0ab0ef478104c1f9ebc5537e303d25a8fb22d6" + integrity sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg== dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" + "@eslint/eslintrc" "^1.4.1" + "@humanwhocodes/config-array" "^0.11.8" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" - debug "^4.0.1" + debug "^4.3.2" doctrine "^3.0.0" - enquirer "^2.3.5" escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" - minimatch "^3.0.4" + minimatch "^3.1.2" natural-compare "^1.4.0" optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" + regexpp "^3.2.0" + strip-ansi "^6.0.1" strip-json-comments "^3.1.0" - table "^6.0.9" text-table "^0.2.0" - v8-compile-cache "^2.0.3" -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== +espree@^9.4.0: + version "9.4.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" + integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" esquery@^1.4.0: version "1.4.0" @@ -1171,11 +1196,6 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" @@ -1202,6 +1222,17 @@ fast-glob@^3.2.11, fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@^3.2.12: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -1264,6 +1295,14 @@ find-up@^2.1.0: dependencies: locate-path "^2.0.0" +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -1282,6 +1321,13 @@ follow-redirects@^1.15.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -1321,11 +1367,6 @@ function.prototype.name@^1.1.5: es-abstract "^1.19.0" functions-have-names "^1.2.2" -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - functions-have-names@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" @@ -1340,6 +1381,15 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: has "^1.0.3" has-symbols "^1.0.1" +get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -1348,6 +1398,11 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" +get-tsconfig@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.4.0.tgz#64eee64596668a81b8fce18403f94f245ee0d4e5" + integrity sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ== + glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -1386,24 +1441,24 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.2.0: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== +globals@^13.19.0: + version "13.20.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" + type-fest "^0.20.2" -globals@^13.6.0, globals@^13.9.0: - version "13.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" - integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== dependencies: - type-fest "^0.20.2" + define-properties "^1.1.3" + +globalyzer@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" + integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== globby@^11.1.0: version "11.1.0" @@ -1417,11 +1472,44 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" +globby@^13.1.2: + version "13.1.3" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.3.tgz#f62baf5720bcb2c1330c8d4ef222ee12318563ff" + integrity sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.2.11" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^4.0.0" + +globrex@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" + integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== + goober@^2.1.10: version "2.1.11" resolved "https://registry.yarnpkg.com/goober/-/goober-2.1.11.tgz#bbd71f90d2df725397340f808dbe7acc3118e610" integrity sha512-5SS2lmxbhqH0u9ABEWq7WPU69a4i2pYcHeCxqaNq6Cw3mnrF0ghWNM4tEGid4dKy8XNIAUbuThuozDHHKJVh3A== +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.2.4: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + has-bigints@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" @@ -1432,11 +1520,6 @@ has-bigints@^1.0.2: resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" @@ -1449,6 +1532,11 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + has-symbols@^1.0.1, has-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" @@ -1480,11 +1568,6 @@ hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: dependencies: react-is "^16.7.0" -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - ignore@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" @@ -1530,15 +1613,33 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" -intl-messageformat@10.1.1: - version "10.1.1" - resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.1.1.tgz#226767e7921fa86cef2cbe4a13911050716720bc" - integrity sha512-FeJne2oooYW6shLPbrqyjRX6hTELVrQ90Dn88z7NomLk/xZBCLxLPAkgaYaTQJBRBV78nZ933d8APHHkTQrD9Q== +internal-slot@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + +intl-messageformat@10.3.1: + version "10.3.1" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.3.1.tgz#99b280b706e4eeb232458dcb1b5758e80abf919c" + integrity sha512-mqHc6arhbogrdImIsEscdjWnJcg2bvg3MiyGXDsTSGmPbbM2KtRUe7oNgDUbkM3HMn4KbyOct2JyJScmwRgGSQ== + dependencies: + "@formatjs/ecma402-abstract" "1.14.3" + "@formatjs/fast-memoize" "1.2.8" + "@formatjs/icu-messageformat-parser" "2.3.0" + tslib "^2.4.0" + +is-array-buffer@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a" + integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ== dependencies: - "@formatjs/ecma402-abstract" "1.11.8" - "@formatjs/fast-memoize" "1.2.4" - "@formatjs/icu-messageformat-parser" "2.1.4" - tslib "2.4.0" + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-typed-array "^1.1.10" is-bigint@^1.0.1: version "1.0.4" @@ -1562,11 +1663,23 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-callable@^1.1.3, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + is-callable@^1.1.4, is-callable@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== +is-core-module@^2.10.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + is-core-module@^2.2.0: version "2.8.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" @@ -1588,16 +1701,16 @@ is-date-object@^1.0.1: dependencies: has-tostringtag "^1.0.0" +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -1627,6 +1740,11 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" @@ -1661,6 +1779,17 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-weakref@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.1.tgz#842dba4ec17fa9ac9850df2d6efbc1737274f2a2" @@ -1675,34 +1804,40 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: +js-sdsl@^4.1.4: + version "4.3.0" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711" + integrity sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ== + +"js-tokens@^3.0.0 || ^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: - argparse "^1.0.7" - esprima "^4.0.0" + argparse "^2.0.1" json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" @@ -1764,16 +1899,18 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - lodash.xor@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.xor/-/lodash.xor-4.5.0.tgz#4d48ed7e98095b0632582ba714d3ff8ae8fb1db6" @@ -1811,6 +1948,14 @@ micromatch@^4.0.4: braces "^3.0.1" picomatch "^2.2.3" +micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" @@ -1835,7 +1980,7 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.5, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -1867,7 +2012,7 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -nanoid@^3.1.30, nanoid@^3.3.4: +nanoid@^3.3.4: version "3.3.4" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== @@ -1877,41 +2022,40 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -next@12.2.2: - version "12.2.2" - resolved "https://registry.yarnpkg.com/next/-/next-12.2.2.tgz#029bf5e4a18a891ca5d05b189b7cd983fd22c072" - integrity sha512-zAYFY45aBry/PlKONqtlloRFqU/We3zWYdn2NoGvDZkoYUYQSJC8WMcalS5C19MxbCZLUVCX7D7a6gTGgl2yLg== - dependencies: - "@next/env" "12.2.2" - "@swc/helpers" "0.4.2" - caniuse-lite "^1.0.30001332" - postcss "8.4.5" - styled-jsx "5.0.2" - use-sync-external-store "1.1.0" +next@^13.2.1: + version "13.2.1" + resolved "https://registry.yarnpkg.com/next/-/next-13.2.1.tgz#34d823f518632b36379863228ed9f861c335b9c0" + integrity sha512-qhgJlDtG0xidNViJUPeQHLGJJoT4zDj/El7fP3D3OzpxJDUfxsm16cK4WTMyvSX1ciIfAq05u+0HqFAa+VJ+Hg== + dependencies: + "@next/env" "13.2.1" + "@swc/helpers" "0.4.14" + caniuse-lite "^1.0.30001406" + postcss "8.4.14" + styled-jsx "5.1.1" optionalDependencies: - "@next/swc-android-arm-eabi" "12.2.2" - "@next/swc-android-arm64" "12.2.2" - "@next/swc-darwin-arm64" "12.2.2" - "@next/swc-darwin-x64" "12.2.2" - "@next/swc-freebsd-x64" "12.2.2" - "@next/swc-linux-arm-gnueabihf" "12.2.2" - "@next/swc-linux-arm64-gnu" "12.2.2" - "@next/swc-linux-arm64-musl" "12.2.2" - "@next/swc-linux-x64-gnu" "12.2.2" - "@next/swc-linux-x64-musl" "12.2.2" - "@next/swc-win32-arm64-msvc" "12.2.2" - "@next/swc-win32-ia32-msvc" "12.2.2" - "@next/swc-win32-x64-msvc" "12.2.2" + "@next/swc-android-arm-eabi" "13.2.1" + "@next/swc-android-arm64" "13.2.1" + "@next/swc-darwin-arm64" "13.2.1" + "@next/swc-darwin-x64" "13.2.1" + "@next/swc-freebsd-x64" "13.2.1" + "@next/swc-linux-arm-gnueabihf" "13.2.1" + "@next/swc-linux-arm64-gnu" "13.2.1" + "@next/swc-linux-arm64-musl" "13.2.1" + "@next/swc-linux-x64-gnu" "13.2.1" + "@next/swc-linux-x64-musl" "13.2.1" + "@next/swc-win32-arm64-msvc" "13.2.1" + "@next/swc-win32-ia32-msvc" "13.2.1" + "@next/swc-win32-x64-msvc" "13.2.1" node-fetch@2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== -node-releases@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" - integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== +node-releases@^2.0.8: + version "2.0.10" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" + integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -1943,6 +2087,11 @@ object-inspect@^1.12.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== +object-inspect@^1.12.2: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -1958,31 +2107,41 @@ object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" -object.entries@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" - integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" -object.fromentries@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" - integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== +object.entries@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" + integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" -object.hasown@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.1.tgz#ad1eecc60d03f49460600430d97f23882cf592a3" - integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A== +object.fromentries@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" + integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== dependencies: + call-bind "^1.0.2" define-properties "^1.1.4" - es-abstract "^1.19.5" + es-abstract "^1.20.4" + +object.hasown@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" + integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== + dependencies: + define-properties "^1.1.4" + es-abstract "^1.20.4" object.values@^1.1.5: version "1.1.5" @@ -1993,6 +2152,15 @@ object.values@^1.1.5: define-properties "^1.1.3" es-abstract "^1.19.1" +object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -2000,6 +2168,15 @@ once@^1.3.0: dependencies: wrappy "1" +open@^8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + optionator@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" @@ -2019,6 +2196,13 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -2026,6 +2210,13 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -2043,6 +2234,11 @@ path-exists@^3.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -2068,7 +2264,7 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -2107,14 +2303,14 @@ postcss-load-config@^3.1.4: lilconfig "^2.0.5" yaml "^1.10.2" -postcss-nested@5.0.6: - version "5.0.6" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-5.0.6.tgz#466343f7fc8d3d46af3e7dba3fcd47d052a945bc" - integrity sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA== +postcss-nested@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.0.tgz#1572f1984736578f360cffc7eb7dca69e30d1735" + integrity sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w== dependencies: - postcss-selector-parser "^6.0.6" + postcss-selector-parser "^6.0.10" -postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.6: +postcss-selector-parser@^6.0.10: version "6.0.10" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== @@ -2122,24 +2318,32 @@ postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.6: cssesc "^3.0.0" util-deprecate "^1.0.2" +postcss-selector-parser@^6.0.11: + version "6.0.11" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" + integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@8.4.5: - version "8.4.5" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.5.tgz#bae665764dfd4c6fcc24dc0fdf7e7aa00cc77f95" - integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg== +postcss@8.4.14: + version "8.4.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== dependencies: - nanoid "^3.1.30" + nanoid "^3.3.4" picocolors "^1.0.0" - source-map-js "^1.0.1" + source-map-js "^1.0.2" -postcss@^8.4.14, postcss@^8.4.16: - version "8.4.16" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.16.tgz#33a1d675fac39941f5f445db0de4db2b6e01d43c" - integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ== +postcss@^8.0.9, postcss@^8.4.21: + version "8.4.21" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" + integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== dependencies: nanoid "^3.3.4" picocolors "^1.0.0" @@ -2150,11 +2354,6 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -2201,7 +2400,7 @@ quick-lru@^5.1.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== -react-dom@18.2.0: +react-dom@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== @@ -2216,33 +2415,33 @@ react-hot-toast@^2.4.0: dependencies: goober "^2.1.10" -react-icomoon@^2.5.3: - version "2.5.4" - resolved "https://registry.yarnpkg.com/react-icomoon/-/react-icomoon-2.5.4.tgz#f7e8a22b31be20f61168cde8c61a66e79ba4d1e5" - integrity sha512-C+xh0F2rB3FyA+6MozU7WDTSj4UPr3BAy/mGqTLwfDA3zgt2RB+l25A7CecX9eHaM/feOSwCoEu/GGiDlK+nqg== - -react-intl@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-6.0.5.tgz#8adcb9108682c82e625a8ce7826283afd3537f62" - integrity sha512-nDZ3BosuE8WdovcGxsrjj1aIgJZklSL5aORs5oah+5tLQTzUdOEstzJEYQPM+sxl1dkDOu7RCuw0z9oI9ENf9g== - dependencies: - "@formatjs/ecma402-abstract" "1.11.8" - "@formatjs/icu-messageformat-parser" "2.1.4" - "@formatjs/intl" "2.3.1" - "@formatjs/intl-displaynames" "6.0.3" - "@formatjs/intl-listformat" "7.0.3" +react-icomoon@^2.5.7: + version "2.5.7" + resolved "https://registry.yarnpkg.com/react-icomoon/-/react-icomoon-2.5.7.tgz#628494b5cf2531af3f2beca30763be5f989f3139" + integrity sha512-o6jsNviL7d2/fk83JXycvMSX76KSQ5GuC+q8xi+3anL4KY8EZH4D1BfXdqL8SF+ppOigrq4epUhfnWX8U/gM7g== + +react-intl@^6.2.10: + version "6.2.10" + resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-6.2.10.tgz#586ba261b3ff67be09072fefdee2ef58497e0ea2" + integrity sha512-l2TpskkFR0OzQnq7ChiJ5ZX23USZSzpKOcaR9MYC4UOHE9bT4kQ5JXXolgkq3tiOlvseEOzUCerlzn886AX9Yg== + dependencies: + "@formatjs/ecma402-abstract" "1.14.3" + "@formatjs/icu-messageformat-parser" "2.3.0" + "@formatjs/intl" "2.6.7" + "@formatjs/intl-displaynames" "6.2.6" + "@formatjs/intl-listformat" "7.1.9" "@types/hoist-non-react-statics" "^3.3.1" "@types/react" "16 || 17 || 18" hoist-non-react-statics "^3.3.2" - intl-messageformat "10.1.1" - tslib "2.4.0" + intl-messageformat "10.3.1" + tslib "^2.4.0" react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react@18.2.0: +react@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== @@ -2268,7 +2467,7 @@ regenerator-runtime@^0.13.4: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== -regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: +regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== @@ -2277,16 +2476,11 @@ regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: define-properties "^1.1.3" functions-have-names "^1.2.2" -regexpp@^3.1.0: +regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -2309,13 +2503,14 @@ resolve@^1.20.0: is-core-module "^2.2.0" path-parse "^1.0.6" -resolve@^2.0.0-next.3: - version "2.0.0-next.3" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" - integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== +resolve@^2.0.0-next.4: + version "2.0.0-next.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" + integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" reusify@^1.0.4: version "1.0.4" @@ -2336,6 +2531,15 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + scheduler@^0.23.0: version "0.23.0" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" @@ -2348,13 +2552,6 @@ semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.2.1: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - semver@^7.3.7: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" @@ -2393,16 +2590,12 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^4.0.0: +slash@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== -source-map-js@^1.0.1, source-map-js@^1.0.2: +source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== @@ -2412,37 +2605,23 @@ split-on-first@^1.0.0: resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== -string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string.prototype.matchall@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" - integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== +string.prototype.matchall@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" + integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - get-intrinsic "^1.1.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" has-symbols "^1.0.3" internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.1" + regexp.prototype.flags "^1.4.3" side-channel "^1.0.4" string.prototype.trimend@^1.0.4: @@ -2462,6 +2641,15 @@ string.prototype.trimend@^1.0.5: define-properties "^1.1.4" es-abstract "^1.19.5" +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + string.prototype.trimstart@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" @@ -2479,7 +2667,16 @@ string.prototype.trimstart@^1.0.5: define-properties "^1.1.4" es-abstract "^1.19.5" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -2496,17 +2693,12 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -styled-jsx@5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.0.2.tgz#ff230fd593b737e9e68b630a694d460425478729" - integrity sha512-LqPQrbBh3egD57NBcHET4qcgshPks+yblyhPlH2GY8oaDgKs8SK4C3dBh3oSJjgzJ3G5t1SYEZGHkP+QEpX9EQ== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== +styled-jsx@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f" + integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw== dependencies: - has-flag "^3.0.0" + client-only "0.0.1" supports-color@^7.1.0: version "7.2.0" @@ -2520,21 +2712,18 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -table@^6.0.9: - version "6.7.3" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.3.tgz#255388439715a738391bd2ee4cbca89a4d05a9b7" - integrity sha512-5DkIxeA7XERBqMwJq0aHZOdMadBx4e6eDoFRuyT5VR82J0Ycg2DwM6GfA/EQAhJ+toRTaS1lIdSQCqgrmhPnlw== +synckit@^0.8.4: + version "0.8.5" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" + integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q== dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" + "@pkgr/utils" "^2.3.1" + tslib "^2.5.0" -tailwindcss@^3.1.8: - version "3.1.8" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.1.8.tgz#4f8520550d67a835d32f2f4021580f9fddb7b741" - integrity sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g== +tailwindcss@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.2.7.tgz#5936dd08c250b05180f0944500c01dce19188c07" + integrity sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ== dependencies: arg "^5.0.2" chokidar "^3.5.3" @@ -2542,28 +2731,42 @@ tailwindcss@^3.1.8: detective "^5.2.1" didyoumean "^1.2.2" dlv "^1.1.3" - fast-glob "^3.2.11" + fast-glob "^3.2.12" glob-parent "^6.0.2" is-glob "^4.0.3" lilconfig "^2.0.6" + micromatch "^4.0.5" normalize-path "^3.0.0" object-hash "^3.0.0" picocolors "^1.0.0" - postcss "^8.4.14" + postcss "^8.0.9" postcss-import "^14.1.0" postcss-js "^4.0.0" postcss-load-config "^3.1.4" - postcss-nested "5.0.6" - postcss-selector-parser "^6.0.10" + postcss-nested "6.0.0" + postcss-selector-parser "^6.0.11" postcss-value-parser "^4.2.0" quick-lru "^5.1.1" resolve "^1.22.1" +tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= +tiny-glob@^0.2.9: + version "0.2.9" + resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2" + integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== + dependencies: + globalyzer "0.1.0" + globrex "^0.1.2" + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -2586,16 +2789,21 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@2.4.0, tslib@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +tslib@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -2615,10 +2823,19 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -typescript@^4.5.5: - version "4.7.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" - integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typescript@^4.9.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== ua-parser-js@^0.7.18: version "0.7.31" @@ -2645,10 +2862,10 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -update-browserslist-db@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" - integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== +update-browserslist-db@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== dependencies: escalade "^3.1.1" picocolors "^1.0.0" @@ -2660,21 +2877,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -use-sync-external-store@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.1.0.tgz#3343c3fe7f7e404db70f8c687adf5c1652d34e82" - integrity sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ== - util-deprecate@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -2686,6 +2893,18 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -2717,3 +2936,8 @@ yaml@^1.10.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 7ccbde3c1250c48adacd0afd9d2e496c902a747f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Fri, 24 Feb 2023 12:40:37 +0300 Subject: [PATCH 10/62] refactor: fix links --- src/components/Header.tsx | 38 ++++------------------ src/components/IntlLink.tsx | 38 ++++++++++++++++------ src/components/LessonBox.tsx | 62 +++++++++++++++++------------------- src/components/Logo.tsx | 18 +++++------ src/components/Section.tsx | 10 +++--- src/pages/404.tsx | 2 +- src/pages/[lang]/index.tsx | 4 +-- src/pages/_document.tsx | 2 +- 8 files changed, 79 insertions(+), 95 deletions(-) diff --git a/src/components/Header.tsx b/src/components/Header.tsx index 938e8338..7f3e2305 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -33,40 +33,14 @@ const Header = ({ page }: Props) => {
{isLearnDetail &&
}
- - {({ isActive }) => ( - - - - )} + + - - {({ isActive }) => ( - - - - )} + + - - {({ isActive }) => ( - - - - )} + + { +const IntlLink = ({ + href, + children, + lang, + query = {}, + passHref, + className = '', + navLink, + tabIndex, +}: Props) => { const { query: routerQuery, pathname } = useRouter(); const currentLang = lang || routerQuery.lang || defaultLocale; @@ -23,16 +36,21 @@ const IntlLink = ({ href, children, lang, query = {}, passHref }: Props) => { ? `/[lang]${intlPathName}` : intlPathName.replace(`/${currentLang}`, `/[lang]`); - const content = - typeof children === 'function' - ? children({ - isActive: pathname === newPathname, - }) - : children; - return ( - - {content} + + {children} ); }; diff --git a/src/components/LessonBox.tsx b/src/components/LessonBox.tsx index 3c14dd04..bf1b55a2 100644 --- a/src/components/LessonBox.tsx +++ b/src/components/LessonBox.tsx @@ -47,42 +47,40 @@ const LessonBox = ({ data, lock, bgColor }: Props) => { const startText = formatMessage({ id: isVisit ? 'general.continue' : 'general.start' }); return ( - - -
-

- -

-

- -

- {!lock && ( -
); }; diff --git a/src/components/Logo.tsx b/src/components/Logo.tsx index 48da84bb..0c638b44 100644 --- a/src/components/Logo.tsx +++ b/src/components/Logo.tsx @@ -2,16 +2,14 @@ import Icon from 'src/components/Icon'; import IntlLink from 'src/components/IntlLink'; const Logo = () => ( - - - - RegexLearn - + + + RegexLearn ); diff --git a/src/components/Section.tsx b/src/components/Section.tsx index f1a8c40e..b961ee9e 100644 --- a/src/components/Section.tsx +++ b/src/components/Section.tsx @@ -48,12 +48,10 @@ const Section = ({ attrs={{ className: 'text-regreen-400' }} /> {isShowButton && ( - - - - + + )} {customButton?.({ className: 'mt-4' })} diff --git a/src/pages/404.tsx b/src/pages/404.tsx index c19da676..41d1eabe 100644 --- a/src/pages/404.tsx +++ b/src/pages/404.tsx @@ -20,7 +20,7 @@ const Page404 = () => {
404 - + diff --git a/src/pages/[lang]/index.tsx b/src/pages/[lang]/index.tsx index e21ea909..d33b9619 100644 --- a/src/pages/[lang]/index.tsx +++ b/src/pages/[lang]/index.tsx @@ -34,12 +34,10 @@ const PageHome = () => { className="md:text-lg md:leading-8 my-1 text-neutral-200/80" text={formatMessage({ id: 'landing.description' })} /> - - + -
diff --git a/src/pages/_document.tsx b/src/pages/_document.tsx index 548b84b8..59a585d8 100644 --- a/src/pages/_document.tsx +++ b/src/pages/_document.tsx @@ -23,7 +23,7 @@ j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= )} - + Date: Fri, 24 Feb 2023 16:32:49 +0300 Subject: [PATCH 11/62] fix: metadata duplicate --- .env | 3 +- src/components/CustomHead.tsx | 43 ------ src/components/PlaygroundEditor.tsx | 8 +- src/components/SeoTags.tsx | 34 ----- src/pages/404.tsx | 61 ++++---- src/pages/[lang]/cheatsheet.tsx | 65 +++++---- src/pages/[lang]/index.tsx | 213 ++++++++++++++-------------- src/pages/[lang]/learn/[lesson].tsx | 19 +-- src/pages/[lang]/learn/index.tsx | 107 +++++++------- src/pages/[lang]/playground.tsx | 95 ++++++------- src/pages/_app.tsx | 41 +++++- src/utils/globalIntl.ts | 9 ++ 12 files changed, 331 insertions(+), 367 deletions(-) delete mode 100644 src/components/CustomHead.tsx delete mode 100644 src/components/SeoTags.tsx create mode 100644 src/utils/globalIntl.ts diff --git a/.env b/.env index 750c6901..425b29ba 100644 --- a/.env +++ b/.env @@ -1 +1,2 @@ -NEXT_PUBLIC_BASE_URL=https://regexlearn.c1-europe.altogic.com/ \ No newline at end of file +NEXT_PUBLIC_API_BASE_URL=https://regexlearn.c1-europe.altogic.com/ +NEXT_PUBLIC_BASE_URL=https://regexlearn.com/ \ No newline at end of file diff --git a/src/components/CustomHead.tsx b/src/components/CustomHead.tsx deleted file mode 100644 index a7b3270c..00000000 --- a/src/components/CustomHead.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { useIntl } from 'react-intl'; -import { useRouter } from 'next/router'; -import Head from 'next/head'; - -import SeoTags from 'src/components/SeoTags'; -import { locales } from 'src/localization'; - -interface CustomHeadProps { - title: string; - description: string; - children?: JSX.Element; - hrefLang?: string; -} - -const CustomHead = ({ title, description, children, hrefLang }: CustomHeadProps) => { - const { formatMessage } = useIntl(); - const { asPath } = useRouter(); - const hasHrefLang = typeof hrefLang === 'string'; - - const pageTitle = formatMessage({ id: title }); - const pageDescription = formatMessage({ id: description }); - const pageHref = asPath.replace('/en', '/').replace('//', '/'); - - return ( - - {children} - {pageTitle && {pageTitle}} - {pageDescription && } - {hasHrefLang && - locales.map(locale => ( - - ))} - - - ); -}; - -export default CustomHead; diff --git a/src/components/PlaygroundEditor.tsx b/src/components/PlaygroundEditor.tsx index 93fcd88c..db0baf1b 100644 --- a/src/components/PlaygroundEditor.tsx +++ b/src/components/PlaygroundEditor.tsx @@ -21,7 +21,7 @@ import FlagSelect from './FlagSelect'; import Button, { ButtonVariants } from './Button'; import copy from 'copy-to-clipboard'; -axios.defaults.baseURL = process.env.NEXT_PUBLIC_BASE_URL; +axios.defaults.baseURL = process.env.NEXT_PUBLIC_API_BASE_URL; function myKeyBindingFn(e): string | null { if (e.ctrlKey && e.key.toLowerCase() === 'm') { @@ -179,11 +179,7 @@ const Playground = () => { setState({ regex, flags, - editorState: checkRegex( - regex, - flags, - EditorState.createWithContent(initialContent), - ), + editorState: checkRegex(regex, flags, EditorState.createWithContent(initialContent)), }); setInitial({ regex: state.regex, flags: state.flags, text: initialContent.getPlainText() }); setCaretPosition(regexInput?.current, state.regex.length); diff --git a/src/components/SeoTags.tsx b/src/components/SeoTags.tsx deleted file mode 100644 index 5ef69889..00000000 --- a/src/components/SeoTags.tsx +++ /dev/null @@ -1,34 +0,0 @@ -const baseURL = 'https://regexlearn.com'; - -interface Props { - title: string; - description: string; - href: string; - image?: string; -} - -const SeoTags = ({ - title, - description, - href = '', - image = baseURL + '/images/og-regexlearn-image.jpg', -}: Props) => ( - <> - {/* */} - - - - - - - {/* */} - - - - - - - -); - -export default SeoTags; diff --git a/src/pages/404.tsx b/src/pages/404.tsx index 41d1eabe..7c15371f 100644 --- a/src/pages/404.tsx +++ b/src/pages/404.tsx @@ -1,54 +1,49 @@ import { GetStaticProps } from 'next'; -import Head from 'next/head'; -import { FormattedMessage, useIntl } from 'react-intl'; +import { FormattedMessage } from 'react-intl'; import Button, { ButtonVariants } from 'src/components/Button'; import Header from 'src/components/Header'; import Footer from 'src/components/Footer'; import IntlLink from 'src/components/IntlLink'; import { defaultLocale } from 'src/localization'; +import globalIntl from 'src/utils/globalIntl'; -const Page404 = () => { - const { formatMessage } = useIntl(); - - return ( - <> - - {formatMessage({ id: 'page.404.title' })} - -
-
-
- 404 - - - -

- , - }} - /> -

-
-
-
- - ); -}; +const Page404 = () => ( +
+
+
+ 404 + + + +

+ , + }} + /> +

+
+
+
+); export default Page404; export const getStaticProps: GetStaticProps = async () => { const messages = require(`src/localization/${defaultLocale}/`)?.default; + const intl = globalIntl('en', messages); return { props: { lang: defaultLocale, messages, + metadata: { + title: intl.formatMessage({ id: 'page.404.title' }), + }, }, }; }; diff --git a/src/pages/[lang]/cheatsheet.tsx b/src/pages/[lang]/cheatsheet.tsx index 117ee8ab..156ca3ff 100644 --- a/src/pages/[lang]/cheatsheet.tsx +++ b/src/pages/[lang]/cheatsheet.tsx @@ -3,10 +3,10 @@ import { FormattedMessage, useIntl } from 'react-intl'; import Header from 'src/components/Header'; import Footer from 'src/components/Footer'; -import CustomHead from 'src/components/CustomHead'; import SupportButton from 'src/components/SupportButton'; import CheatsheetCollapse from 'src/components/CheatsheetCollapse'; import { defaultLocale, locales } from 'src/localization'; +import globalIntl from 'src/utils/globalIntl'; import data from 'src/data/cheatsheet.json'; const columns = [data.slice(0, 3), data.slice(3, 4), data.slice(4, 6)]; @@ -15,40 +15,33 @@ const PageCheatsheet = () => { const { formatMessage } = useIntl(); return ( - <> - -
-
-
- {columns.map((column, index) => ( -
-
- {column.map(row => ( -
-

- -

- {row.data.map(item => ( - - ))} -
- ))} -
+
+
+
+ {columns.map((column, index) => ( +
+
+ {column.map(row => ( +
+

+ +

+ {row.data.map(item => ( + + ))} +
+ ))}
- ))} -
- -
+
+ ))}
- + +
+
); }; @@ -57,11 +50,17 @@ export default PageCheatsheet; export const getStaticProps: GetStaticProps = async ({ params }) => { const lang = params.lang || defaultLocale; const messages = require(`src/localization/${lang}/`)?.default; + const intl = globalIntl(lang, messages); return { props: { lang, messages, + metadata: { + title: intl.formatMessage({ id: 'page.cheatsheet.title' }), + description: intl.formatMessage({ id: 'page.cheatsheet.description' }), + hrefLang: 'cheatsheet', + }, }, }; }; diff --git a/src/pages/[lang]/index.tsx b/src/pages/[lang]/index.tsx index d33b9619..29e8399c 100644 --- a/src/pages/[lang]/index.tsx +++ b/src/pages/[lang]/index.tsx @@ -8,132 +8,129 @@ import Header from 'src/components/Header'; import Footer from 'src/components/Footer'; import Section from 'src/components/Section'; import IntlLink from 'src/components/IntlLink'; -import CustomHead from 'src/components/CustomHead'; import SupportButton from 'src/components/SupportButton'; import HighlightedText from 'src/components/HighlightedText'; import Button, { ButtonVariants } from 'src/components/Button'; import ProductHuntBadges from 'src/components/ProductHuntBadges'; import sponsors from 'sponsors.json'; +import globalIntl from 'src/utils/globalIntl'; const PageHome = () => { const { formatMessage } = useIntl(); return ( - <> - -
-
-
-
-

- -

- - - - -
-
- {formatMessage({ -
+
+
+
+
+

+ +

+ + + +
- -
- +
+ {formatMessage({
+
-
-
-
-
-
( +
+ +
+ +
+
+
+
+
( + + + + )} + /> +
+

+ +

+
+ {sponsors.map(sponsor => ( - + {sponsor.name} - )} - /> -
-

- -

-
- {sponsors.map(sponsor => ( - - {sponsor.name} - - ))} -
+ ))}
- -
- + +
+
); }; @@ -142,11 +139,17 @@ export default PageHome; export const getStaticProps: GetStaticProps = async ({ params }) => { const lang = params.lang || defaultLocale; const messages = require(`src/localization/${lang}/`)?.default; + const intl = globalIntl(lang, messages); return { props: { lang, messages, + metadata: { + title: intl.formatMessage({ id: 'page.landing.title' }), + description: intl.formatMessage({ id: 'page.landing.description' }), + hrefLang: '', + }, }, }; }; diff --git a/src/pages/[lang]/learn/[lesson].tsx b/src/pages/[lang]/learn/[lesson].tsx index de752f70..6b6f22f0 100644 --- a/src/pages/[lang]/learn/[lesson].tsx +++ b/src/pages/[lang]/learn/[lesson].tsx @@ -1,14 +1,15 @@ import { GetStaticPaths, GetStaticProps } from 'next'; +import Head from 'next/head'; import Header from 'src/components/Header'; -import CustomHead from 'src/components/CustomHead'; import LearnFooter from 'src/components/LearnFooter'; import Step from 'src/components/Step'; import LearnProgress from 'src/components/LearnProgress'; import { defaultLocale, locales } from 'src/localization'; import { Lesson } from 'src/types'; -import lessons from 'src/data/lessons/index.json'; import { InteractiveAreaProvider } from 'src/context/InteractiveAreaContext'; +import globalIntl from 'src/utils/globalIntl'; +import lessons from 'src/data/lessons/index.json'; type PageLessonProps = { lesson: Lesson; @@ -19,13 +20,9 @@ const PageLesson = ({ lesson }: PageLessonProps) => { return ( <> - + - +
@@ -44,12 +41,18 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { const lang = params.lang || defaultLocale; const messages = require(`src/localization/${lang}/`)?.default; const lesson = lessons.find(({ slug }) => slug === params.lesson); + const intl = globalIntl(lang, messages); return { props: { lang, messages, lesson, + metadata: { + title: intl.formatMessage({ id: `lessons.${lesson.key}.title` }), + description: intl.formatMessage({ id: `lessons.${lesson.key}.description` }), + hrefLang: `learn/${lesson.slug}`, + }, }, }; }; diff --git a/src/pages/[lang]/learn/index.tsx b/src/pages/[lang]/learn/index.tsx index 09e993c6..6c1a9deb 100644 --- a/src/pages/[lang]/learn/index.tsx +++ b/src/pages/[lang]/learn/index.tsx @@ -4,72 +4,65 @@ import { useIntl, FormattedMessage } from 'react-intl'; import Header from 'src/components/Header'; import Footer from 'src/components/Footer'; import LessonBox from 'src/components/LessonBox'; -import CustomHead from 'src/components/CustomHead'; import SupportButton from 'src/components/SupportButton'; import HighlightedText from 'src/components/HighlightedText'; - import { defaultLocale, locales } from 'src/localization'; +import globalIntl from 'src/utils/globalIntl'; import lessons from 'src/data/lessons/index.json'; const PageLearn = () => { const { formatMessage } = useIntl(); return ( - <> - - - -
-
-
-
-
-

- -

- -
- +
+
+
+ - -
- + +
+
); }; @@ -78,11 +71,17 @@ export default PageLearn; export const getStaticProps: GetStaticProps = async ({ params }) => { const lang = params.lang || defaultLocale; const messages = require(`src/localization/${lang}/`)?.default; + const intl = globalIntl(lang, messages); return { props: { lang, messages, + metadata: { + title: intl.formatMessage({ id: 'page.learn.title' }), + description: intl.formatMessage({ id: 'page.learn.description' }), + hrefLang: 'learn', + }, }, }; }; diff --git a/src/pages/[lang]/playground.tsx b/src/pages/[lang]/playground.tsx index 907558a3..6dd176c6 100644 --- a/src/pages/[lang]/playground.tsx +++ b/src/pages/[lang]/playground.tsx @@ -3,69 +3,60 @@ import { GetStaticPaths, GetStaticProps } from 'next'; import Header from 'src/components/Header'; import PlaygroundEditor from 'src/components/PlaygroundEditor'; import PlaygroundSidebar from 'src/components/PlaygroundSidebar'; -import CustomHead from 'src/components/CustomHead'; import { defaultLocale, locales } from 'src/localization'; import Icon from 'src/components/Icon'; import ReportPlayground from 'src/components/ReportPlayground'; +import globalIntl from 'src/utils/globalIntl'; const PagePlayground = () => ( - <> - - - -
-
-
-
- -
-
- -
+ ); export default PagePlayground; @@ -73,11 +64,17 @@ export default PagePlayground; export const getStaticProps: GetStaticProps = async ({ params }) => { const lang = params.lang || defaultLocale; const messages = require(`src/localization/${lang}/`)?.default; + const intl = globalIntl(lang, messages); return { props: { lang, messages, + metadata: { + title: intl.formatMessage({ id: 'page.playground.title' }), + description: intl.formatMessage({ id: 'page.playground.description' }), + hrefLang: 'playground', + }, }, }; }; diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 5342b84c..6d5062ee 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -2,9 +2,11 @@ import 'src/styles/globals.css'; import { useEffect } from 'react'; import { AppProps } from 'next/app'; +import Head from 'next/head'; +import { useRouter } from 'next/router'; import { IntlProvider } from 'react-intl'; -import { defaultLocale } from 'src/localization'; +import { defaultLocale, locales } from 'src/localization'; require('src/migration').migration(); @@ -21,12 +23,49 @@ const MyApp = ({ Component, pageProps }: AppProps) => { return () => window.removeEventListener('keydown', preventBrowserShortcut); }, []); + console.log('pageProps', pageProps ? pageProps.metadata : 1); + const { metadata } = pageProps || {}; + const baseURL = process.env.NEXT_PUBLIC_BASE_URL; + const { asPath } = useRouter(); + + const href = asPath.replace('/en', '/').replace('//', '/'); return ( + {metadata && ( + + {metadata.title} + + {typeof metadata.hrefLang === 'string' && + locales.map(locale => ( + + ))} + {/* */} + + + + + + + {/* */} + + + + + + + + )}
diff --git a/src/utils/globalIntl.ts b/src/utils/globalIntl.ts new file mode 100644 index 00000000..28ebb60f --- /dev/null +++ b/src/utils/globalIntl.ts @@ -0,0 +1,9 @@ +import { createIntl } from 'react-intl'; +import { defaultLocale } from 'src/localization'; + +const globalIntl = (locale, messages) => { + const intl = createIntl({ defaultLocale, locale, messages }); + return intl; +}; + +export default globalIntl; From 2e020f28de7b0c0c98baf63b958e8ca49e04f8a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Fri, 24 Feb 2023 18:18:32 +0300 Subject: [PATCH 12/62] 2.23.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d93bf522..ea8b9fb5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "regexlearn", - "version": "2.22.2", + "version": "2.23.0", "author": { "name": "Aykut Kardaş", "email": "aykutkrds@gmail.com" From 2bd9c2af1e79489a8b2a352dfe09efd732e72ca9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Fri, 24 Feb 2023 18:19:40 +0300 Subject: [PATCH 13/62] fix: browser shorcuts prevent --- src/pages/_app.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 6d5062ee..b220cba3 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -13,7 +13,7 @@ require('src/migration').migration(); const MyApp = ({ Component, pageProps }: AppProps) => { useEffect(() => { const preventBrowserShortcut = e => { - if (e.ctrlKey && e.key.toLowerCase() === 'g') { + if (e.ctrlKey && 'gmi'.includes(e.key.toLowerCase())) { e.preventDefault(); } }; From 309d04509d6f168a2ec122d862ab73394904df85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Fri, 24 Feb 2023 18:19:45 +0300 Subject: [PATCH 14/62] 2.23.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ea8b9fb5..624f1e46 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "regexlearn", - "version": "2.23.0", + "version": "2.23.1", "author": { "name": "Aykut Kardaş", "email": "aykutkrds@gmail.com" From e51e29bb273ca68cddf17d07a40424da1fbf8eb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Fri, 24 Feb 2023 18:22:12 +0300 Subject: [PATCH 15/62] fix: remove log line --- src/pages/_app.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index b220cba3..3f4727fc 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -23,7 +23,6 @@ const MyApp = ({ Component, pageProps }: AppProps) => { return () => window.removeEventListener('keydown', preventBrowserShortcut); }, []); - console.log('pageProps', pageProps ? pageProps.metadata : 1); const { metadata } = pageProps || {}; const baseURL = process.env.NEXT_PUBLIC_BASE_URL; const { asPath } = useRouter(); From 0ae3c0221ac71a07e71725ffd15e55d314836ca0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Fri, 24 Feb 2023 18:22:15 +0300 Subject: [PATCH 16/62] 2.23.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 624f1e46..d303807f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "regexlearn", - "version": "2.23.1", + "version": "2.23.2", "author": { "name": "Aykut Kardaş", "email": "aykutkrds@gmail.com" From a6542fb5b13f2ea2890a418611829417ac0cb829 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Sat, 18 Mar 2023 11:20:30 +0300 Subject: [PATCH 17/62] feat: add `interactively.info` as a creator --- public/interactively.webp | Bin 0 -> 1764 bytes src/components/Step.tsx | 12 +++++++++--- src/data/lessons/index.json | 4 ++++ src/pages/[lang]/learn/index.tsx | 17 ++++++++++++----- src/types.d.ts | 4 ++++ 5 files changed, 29 insertions(+), 8 deletions(-) create mode 100644 public/interactively.webp diff --git a/public/interactively.webp b/public/interactively.webp new file mode 100644 index 0000000000000000000000000000000000000000..9d9fe7d95855104cdd7bef9b6bf606846761c8f7 GIT binary patch literal 1764 zcmVwCP1fS*=mFT z?~f()X5Wgj&3M1QQ@P>};|}WeT}uC8FufTX?&&Rx9l*vIFkrwx;|+?+p#cxTK#jL2 zRSfO`8{7@|^zQs)0~l<;fZZ8$e{*gI8^8>Vv9ST1{}L(3?@ ztJ2aprFC6ja09TxHehqs0M`>4>MK&t)9;gV&fNrjd{Y1~*bi*uGq$k}lyAF1`F%3f zPIpTD27wJ2Y|fkBz~!&-3%+JChvs=>Y?h}YLP}GPF2w?SL>ii=s&;xe{e9kt#&GuA<%Vz_&kTT<|r1aH*`ZWMj zfmKRh4PcAWX9L(m3dXAhT(m+NEKnrH22ihO3fu=9Y}&yG&zj@}S! zUw>$WI$x$8ili@Koj)p6rTG)uJja0wTqOk%QiU>4w+h#z)F4aBP$dA{VEhCI+kjtD zB&on%(hZ6vWvEF~G}`E){&s(aqzqM3g+)?okfjV&{b+?v(hVNc4T>ZM>_@u8D(McJ zWH5kv-o|vi;-gz&J9USv`VFSRG&szFl%cBsv98k#5;RE#uF?bMP6aMU8H%JGCaG~~ zKSyt9ub8{rGX?h2H@FTi2YJ~_Ww5|wFn&q}vJx~&JCtFA`A7|t0;;5X^t1sC;Q#$X zC(lKpZ-W)KZ&~238*Gv)XV0v#Xn{r21{iGo1Q;`T{6gz|m`+uw>vf930*`M=jiwFe z(RDsdCo&Wj2uTZo4KKm&mS5!#i_RWps7cZ^$j}Bq)^&P?3gkwWqz8QHK^4DXKt`b(&r#G_>`0?%rE(X0$aC08I*EQXI9wY+Nl_O@T6@p zz^?Dgz_ui*K>ZQ<0aa%vXji4LHqa-q<=YNbQUKc$XHo;0yHug%$OU$tN%S$eF*ZK% z01RNR-=+$XrKpVCbV`NcW2Ao>w~(X)a6O|tP&J$?;~J+_fQQD_?hfq{*kD}seNli# zQf#d&p>t{L9_c{0+Lcfr8?c?qz&cWFU3-MiEx`34b8Jo;FveWZd}F#?G@j-u>G?Fz zNvEfIN;*!Li@q_<^OW>#hNj~?9%1kZF#TQc=LXw}v||rW+8EpZncj{3C_tQ0R0am@ z4ltOXp?7lwSamuoFSN}bdOvC{vz|=%&Ia5wyeGZMx5}Xz|D5$k-*y{phW}mlX20H|IvF(qR_=|06FpFT%Zb zjgkX(unqvr;)m{oY>%A-8#)_qka^Zzm2h)A(I*5}yZjmT^)>yP;y<0-1%`jQ*#oZp zGncewj90>h7yqv)RqTypw*0b{U+wg=cWl&o&!iN~r#3)`hsV4B>QDdw=xrbW|J0DD zYx57g)AmE2YslM%#pYJF45|Cp0q6sL>C8kVYgOntg64tjU8v?t@rqu@DLf|7Z{zl< z0uis601C;{q%(s6-4f;>UIE=P(34;%os}WLKyiA_8lQbzPk`&A~v-K{r1I# zG7q*7K~TIf&n0YEe4PH#2i=1ZiM^_y`=9^%4TFek<{{C@%my>BK`B)vq_r~m%`yw_bNAObxY GumAv@V@DML literal 0 HcmV?d00001 diff --git a/src/components/Step.tsx b/src/components/Step.tsx index 046b32d1..902299ce 100644 --- a/src/components/Step.tsx +++ b/src/components/Step.tsx @@ -69,14 +69,20 @@ const Step = () => { - {lesson.sponsor ? ( + {lesson.sponsor || lesson.creator ? ( - Sponsored by {lesson.sponsor} + {lesson.sponsor ? 'Sponsored' : 'Created'} by{' '} + {lesson.sponsor ) : ( Become a Sponsor diff --git a/src/data/lessons/index.json b/src/data/lessons/index.json index 5f1793b3..c688a814 100644 --- a/src/data/lessons/index.json +++ b/src/data/lessons/index.json @@ -4,6 +4,10 @@ "slug": "regex101", "title": "lessons.regex101.title", "description": "lessons.regex101.description", + "creator": "Interactively", + "creatorURL": "https://interactively.info/?utm_source=regexlearn&utm_medium=referral", + "creatorLogo": "/interactively.webp", + "logoHeight": 18, "stepCount": 56 }, { diff --git a/src/pages/[lang]/learn/index.tsx b/src/pages/[lang]/learn/index.tsx index 6c1a9deb..00e1054e 100644 --- a/src/pages/[lang]/learn/index.tsx +++ b/src/pages/[lang]/learn/index.tsx @@ -39,17 +39,24 @@ const PageLearn = () => { } /> - {lesson.sponsor ? ( + {lesson.sponsor || lesson.creator ? ( - Sponsored by{' '} - {lesson.sponsor} + {lesson.sponsor ? 'Sponsored' : 'Created'} by{' '} + {lesson.sponsor ) : ( Become a Sponsor diff --git a/src/types.d.ts b/src/types.d.ts index 32d62e96..7cd0226d 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -1,6 +1,10 @@ export type Lesson = { key: string; slug: string; + creator?: string; + creatorURL?: string; + creatorLogo?: string; + logoHeight?: number; sponsorURL?: string; sponsorLogo?: string; sponsor?: string; From 7c74d28eaa07e26c6e6b232863bab1e098239005 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Sat, 18 Mar 2023 11:21:19 +0300 Subject: [PATCH 18/62] fix: header responsive --- src/components/Header.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/Header.tsx b/src/components/Header.tsx index 7f3e2305..60a16964 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -33,13 +33,13 @@ const Header = ({ page }: Props) => {
{isLearnDetail &&
}
- + - + - + From 0dd932a4601a00bd22cf17c383aed3d3802556e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Sat, 18 Mar 2023 11:21:31 +0300 Subject: [PATCH 19/62] 2.23.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d303807f..207fa353 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "regexlearn", - "version": "2.23.2", + "version": "2.23.3", "author": { "name": "Aykut Kardaş", "email": "aykutkrds@gmail.com" From 94a2a1a864d78b1879c9f0cbed2486284cbc912e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Sat, 18 Mar 2023 11:22:44 +0300 Subject: [PATCH 20/62] fix: missing creator URL --- src/components/Step.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/components/Step.tsx b/src/components/Step.tsx index 902299ce..c9be5590 100644 --- a/src/components/Step.tsx +++ b/src/components/Step.tsx @@ -70,7 +70,11 @@ const Step = () => { From ce5a6ec766badb828b9a93e59167db079fb76776 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Sat, 18 Mar 2023 11:22:50 +0300 Subject: [PATCH 21/62] 2.23.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 207fa353..55184495 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "regexlearn", - "version": "2.23.3", + "version": "2.23.4", "author": { "name": "Aykut Kardaş", "email": "aykutkrds@gmail.com" From dbdb48c36e78477029b52b58689576346c150d8d Mon Sep 17 00:00:00 2001 From: Andrey Zontov Date: Wed, 22 Mar 2023 14:52:33 +0200 Subject: [PATCH 22/62] Update general.json (#287) --- src/localization/uk/general.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/localization/uk/general.json b/src/localization/uk/general.json index 6a1bcc92..ca691e78 100644 --- a/src/localization/uk/general.json +++ b/src/localization/uk/general.json @@ -16,7 +16,7 @@ "general.playground": "Playground", "general.cheatsheet": "Cheatsheet", "general.ourSponsors": "Наші спонсори", - "general.share": "Поділіться", + "general.share": "Поділитись", "general.shareLinkCopied": "Посилання для обміну скопійовано!", "general.somethingWentWrong": "Щось пішло не так!", From a03d9a36b061a88a5dfd4a1719e27fd9560bcfad Mon Sep 17 00:00:00 2001 From: Andrey Zontov Date: Wed, 22 Mar 2023 14:53:12 +0200 Subject: [PATCH 23/62] [Ukranian] Update `/uk/learn.json` (#289) --- src/localization/uk/learn.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/localization/uk/learn.json b/src/localization/uk/learn.json index 2ceb49e2..8a6f0e80 100644 --- a/src/localization/uk/learn.json +++ b/src/localization/uk/learn.json @@ -27,7 +27,7 @@ "steps.range.description": "Щоб знайти літери у вказаному діапазоні, початкова літера та кінцева літера записуються у квадратні дужки `[]` з тире між ними `-`. Реєстр враховується. Тип виразу, який вибере всі малі літери між `e` і `o`, включаючи їх самих.", "steps.rangeNumber.title": "Цифровий діапазон `[0-9]`", - "steps.rangeNumber.description": "Щоб знайти числа у вказаному діапазоні, початковий номер і кінцевий номер записуються в квадратних дужках `[]` з тире `-' між ними. Напишіть вираз, який вибере всі числа від `3` до `6`, включаючи самих себе.", + "steps.rangeNumber.description": "Щоб знайти числа у вказаному діапазоні, початковий номер і кінцевий номер записуються в квадратних дужках `[]` з тире `-` між ними. Напишіть вираз, який вибере всі числа від `3` до `6`, включаючи самих себе.", "examples.basicMatchers.title": "Практика: Базові подібності", "examples.basicMatchers.description": "Напишіть вираз, який вибиратиме слова `of` у тексті.", From 5e77d968155a446e59b8779c21d2dfbd1a955b37 Mon Sep 17 00:00:00 2001 From: Andrey Zontov Date: Wed, 22 Mar 2023 14:54:24 +0200 Subject: [PATCH 24/62] [Ukranian] Update `/uk/landing.json` (#290) --- src/localization/uk/landing.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/localization/uk/landing.json b/src/localization/uk/landing.json index 21e4527e..4c95e0b9 100644 --- a/src/localization/uk/landing.json +++ b/src/localization/uk/landing.json @@ -21,6 +21,6 @@ "section.practice.imageAltText": "Ілюстрація жінки, яка робить нотатки в книзі.", "section.opensource.title": "Open Source", - "section.opensource.content": "Regex Learn - це проект з відкритим вихідним кодом, який вітає внесок спільноти та є безкоштовним для використання. Робота над цим проектом дозволяє вам відточувати свої навички, навчатися та співпрацювати з іншими учасниками. Тут ви можете зробити свій внесок і підтримати проект.", + "section.opensource.content": "Regex Learn - це проєкт з відкритим вихідним кодом, який вітає внесок спільноти та є безкоштовним для використання. Робота над цим проєктом дозволяє вам відточувати свої навички, навчатися та співпрацювати з іншими учасниками. Тут ви можете зробити свій внесок і підтримати проєкт.", "section.opensource.imageAltText": "Ілюстрація жінки, чоловіка і кішки, що збирають шматочки головоломки." } From f15bf1b814b147a6aa733a553348e5fe41ac6daf Mon Sep 17 00:00:00 2001 From: Andrey Zontov Date: Wed, 22 Mar 2023 14:57:30 +0200 Subject: [PATCH 25/62] [Ukranian] Update `/uk/general.json` (#291) * [Ukranian] Update `/uk/general.json` * Update general.json --- src/localization/uk/general.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/localization/uk/general.json b/src/localization/uk/general.json index ca691e78..3e822498 100644 --- a/src/localization/uk/general.json +++ b/src/localization/uk/general.json @@ -31,7 +31,7 @@ "page.landing.description": "Вивчайте Regex в інтерактивному режимі, практикуйтесь на своєму рівні, протестуйте та поділіться своїми власними Regex з іншими учасниками.", "page.learn.description": "Вивчайте Regex крок за кроком. Пройдіть інтерактивне керівництво, яке зробить ваше навчання простішим та швидшим.", - "page.cheatsheet.description": "Іноді вам необхідно запам'ятати Regex. Використовуйте шпаргалку, яка допоможе вам краще зрозуміти та запам'ятати Regexp.", + "page.cheatsheet.description": "Іноді вам необхідно запамʼятати Regex. Використовуйте шпаргалку, яка допоможе вам краще зрозуміти та запамʼятати Regexp.", "page.playground.description": "Ви можете легко створити та протестувати шаблон регулярного вираження онлайн через Playground.", "learn.safari.unsupportWarning": "Регулярні вираження на цьому етапі не підтримуються деякими браузерами. Якщо у вас виникли проблеми з проходженням цього кроку. Ви можете натиснути тут." From a91a818fde6aff296e4f7caf8eb8803e7f1a4b5a Mon Sep 17 00:00:00 2001 From: Andrey Zontov Date: Wed, 22 Mar 2023 14:58:37 +0200 Subject: [PATCH 26/62] [Ukranian] Update `/uk/cheatsheet.json` (#292) --- src/localization/uk/cheatsheet.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/localization/uk/cheatsheet.json b/src/localization/uk/cheatsheet.json index b17fccfc..317db2d2 100644 --- a/src/localization/uk/cheatsheet.json +++ b/src/localization/uk/cheatsheet.json @@ -63,8 +63,8 @@ "cheatsheet.asterisk.description": "Вираз відповідає нулю чи більше.", "cheatsheet.quantifier.title": "Квантифікатор", "cheatsheet.quantifier.description": "Вираз відповідає зазначеним діапазонам.", - "cheatsheet.optional.title": "Не обов'язково", - "cheatsheet.optional.description": "Робить вираз необов'язковим.", + "cheatsheet.optional.title": "Не обовʼязково", + "cheatsheet.optional.description": "Робить вираз необовʼязковим.", "cheatsheet.alternation.title": "Чергування", "cheatsheet.alternation.description": "Очікується збіг одного із зарезервованих виразів." } From e08659a0bda2884e993ad7fa92db8e6be31c62e8 Mon Sep 17 00:00:00 2001 From: Andrey Zontov Date: Thu, 23 Mar 2023 07:56:00 +0200 Subject: [PATCH 27/62] [Ukranian] Translate `/uk/lessons/regexForSeo.json` (#288) * [Ukranian] Translate `/uk/lessons/regexForSeo.json` * Update regexForSeo.json --- src/localization/uk/lessons/regexForSeo.json | 62 ++++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/src/localization/uk/lessons/regexForSeo.json b/src/localization/uk/lessons/regexForSeo.json index bcf22cc2..afee73ee 100644 --- a/src/localization/uk/lessons/regexForSeo.json +++ b/src/localization/uk/lessons/regexForSeo.json @@ -1,49 +1,49 @@ { - "lesson.regexForSeo.starter.title": "Regex for SEO", - "lesson.regexForSeo.starter.description": "Regex is a set of regular expressions frequently used in many fields, especially by people who want to increase their productivity. The advantages of using Regex for SEO are that it makes it easier to analyze big data and write richer filters. We recommend starting with the `Regex 101` tutorial if you are new to Regex. \\n\\nStart by typing `OK` in the Regex field to proceed to the first step and access more detailed explanations.", + "lesson.regexForSeo.starter.title": "Regex для SEO", + "lesson.regexForSeo.starter.description": "Regex - це набір регулярних виразів, які часто використовуються в багатьох сферах, особливо людьми, які хочуть підвищити свою продуктивність. Переваги використання Regex для SEO полягають у тому, що він полегшує аналіз великих даних і написання більш якісних фільтрів. Ми рекомендуємо почати з підручника `Regex 101`, якщо ви новачок у Regex. \\n\\nПочніть з введення `OK` в полі Regex, щоб перейти до першого кроку і отримати доступ до більш детальних пояснень.", - "lesson.regexForSeo.usage.title": "Use Cases", - "lesson.regexForSeo.usage.description": "You can use Regex for SEO on platforms such as `Google Analytics`, `Google Data Studio`, `Google Sheets`, `Google Search Console`, `Ahrefs`, `Deepcrawl`, `Screaming Frog`. It is also frequently used in `.htaccess` and `robots.txt (regex-like syntax)` files.\\n\\nBelow is a sample regex that will select only texts in the list that start with `Google`.", + "lesson.regexForSeo.usage.title": "Приклади використання", + "lesson.regexForSeo.usage.description": "Ви можете використовувати Regex для SEO на таких платформах, як `Google Analytics`, `Google Data Studio`, `Google Sheets`, `Google Search Console`, `Ahrefs`, `Deepcrawl`, `Screaming Frog`. Він також часто використовується у файлах `.htaccess` та `robots.txt (regex-подібний синтаксис)`.\\n\\nНижче наведено приклад регексу, який вибере зі списку лише тексти, що починаються з `Google`.", - "lesson.regexForSeo.basics.title": "Basics", - "lesson.regexForSeo.basics.description": "Let's take a look at some Regexes that you will use frequently. We recommend that you review the `Regex 101` tutorial to learn more about these. Type `Yes` to get started.", + "lesson.regexForSeo.basics.title": "Базові поняття", + "lesson.regexForSeo.basics.description": "Давайте розглянемо деякі Regexp, які ви будете часто використовувати. Рекомендуємо вам переглянути підручник `Regex 101`, щоб дізнатися про них більше. Введіть `Yes`, щоб почати.", - "lesson.regexForSeo.or.title": "Or Operator `|`", - "lesson.regexForSeo.or.description": "We use the Or operator `|` to filter out multiple expressions. For example, filter text containing `seo` and `regex` by writing the two words, separating them with the Or operator `|`.", + "lesson.regexForSeo.or.title": "Або оператор `|`", + "lesson.regexForSeo.or.description": "Ми використовуємо оператор або `|` для фільтрації декількох виразів. Наприклад, відфільтруйте текст, що містить `seo` і `regex`, написавши ці два слова, розділивши їх оператором або `|`.", - "lesson.regexForSeo.optional.title": "Optional Operator `?`", - "lesson.regexForSeo.optional.description": "We use it to express that an expression or character is optional. For example, we want to filter text containing both `http` and `https`. We can use the Or operator `|` for this operation, but there is a better way for these two almost identical words.\\n\\nIn this example, the letter `s` is optional. Instead, add a question mark `?` to the end of the letter `s`.", + "lesson.regexForSeo.optional.title": "Необовʼязковий оператор `?`", + "lesson.regexForSeo.optional.description": "Ми використовуємо його, щоб вказати, що вираз або символ є необовʼязковим. Наприклад, ми хочемо відфільтрувати текст, що містить як `http`, так і `https`. Для цієї операції можна використати оператор або `|`, але для цих двох майже однакових слів є кращий спосіб.\\n\\nУ цьому прикладі літера `s` є необовʼязковою. Замість неї додайте знак питання `?` в кінці літери `s`.", - "lesson.regexForSeo.any.title": "Anything `.*`", - "lesson.regexForSeo.any.description": "In regex, the period `.` can match anything, including spaces. But this match is only for a single character where it is used. The asterisk character `*` means that the preceding item does not exist at all or occurs more than once in the text. When the two are used together, it means that there can be an element of unlimited length where used.\\n\\nBelow are various keywords. Add `.*` to the end of the regex to write the expression that starts with `how to write` and matches everything after it.", + "lesson.regexForSeo.any.title": "Що завгодно `.*`", + "lesson.regexForSeo.any.description": "У regex крапка `.` може збігатися з будь-чим, включно з пробілами. Але ця відповідність є лише для одного символу, де вона використовується. Символ зірочки `*` означає, що попередній елемент не існує взагалі або зустрічається в тексті більше одного разу. Коли вони використовуються разом, це означає, що в місці використання може бути елемент необмеженої довжини.\\n\\nНижче наведено різні ключові слова. Додайте `.*` у кінці регексу, щоб записати вираз, який починається зі слова `how to write` і збігається з усім, що знаходиться після нього.", - "lesson.regexForSeo.contains.title": "Contains", - "lesson.regexForSeo.contains.description": "To filter the text that contains the words or phrases we're looking for, we write the word we're looking for between our two phrases `.*` that match everything. For example, type `.*buy.*` to filter out what includes `buy`.", + "lesson.regexForSeo.contains.title": "Містить", + "lesson.regexForSeo.contains.description": "Щоб відфільтрувати текст, який містить слова або фрази, які ми шукаємо, ми пишемо слово, яке ми шукаємо, між двома фразами `.*`, які збігаються з усіма. Наприклад, введіть `.*buy.*`, щоб відфільтрувати те, що містить слово `buy`.", - "lesson.regexForSeo.negated.title": "Negated Character Sets `[^abc]`", - "lesson.regexForSeo.negated.description": "We use the negated character sets `[^]` to denote characters we don't want to be included. The characters we do not want to be included are written in square brackets with a caret at the beginning. Below are both `http` and `https`. Since `http` occurs in both, it will also choose `https`. Type `[^s]` after the letter `p` to exclude the letter `s`.", + "lesson.regexForSeo.negated.title": "Заперечні набори символів `[^abc]`", + "lesson.regexForSeo.negated.description": "Ми використовуємо заперечні набори символів `[^]` для позначення символів, які ми не хочемо включати. Символи, які ми не хочемо включати, пишуться у квадратних дужках з косою рискою на початку. Нижче наведено символи `http` і `https`. Оскільки `http` зустрічається в обох варіантах, програма також вибере `https`. Введіть `[^s]` після літери `p`, щоб виключити літеру `s`.", - "lesson.regexForSeo.caret.title": "Caret Sign `^`", - "lesson.regexForSeo.caret.description": "Let's say we have a list of URLs, and we want to find only those URLs that start with `http`. But URLs also contain `http` in different parts other than their beginning. So add a caret `^` to the beginning of the following expression to filter out only those starting with `http`.", + "lesson.regexForSeo.caret.title": "Знак каретки. `^`", + "lesson.regexForSeo.caret.description": "Припустимо, у нас є список URL-адрес, і ми хочемо знайти тільки ті, які починаються з `http`. Але URL-адреси можуть містити `http` і в інших частинах, окрім початку. Тому додайте на початку наступного виразу символ `^`, щоб відфільтрувати лише ті, що починаються з `http`.", - "lesson.regexForSeo.dollarAndEscape.title": "Dollar Sign `$` and Escape Character `\\`", - "lesson.regexForSeo.dollarAndEscape.description": "Again we have a list of URLs. We want to find only those URLs ending in `.htm`.\\n\\nSince the period `.` is a special character that matches everything, we first need to disable the period before `htm` using the escape character `\\`. This applies to all special characters.\\n\\nThen add a `$` sign to the end of the expression. This ensures that the text to be filtered ends with the expression written before it.", + "lesson.regexForSeo.dollarAndEscape.title": "Знак долара `$` та символ екранування `\\`", + "lesson.regexForSeo.dollarAndEscape.description": "Знову у нас є список URL-адрес. Ми хочемо знайти лише ті URL-адреси, які закінчуються на `.htm`.\\n\\nОскільки крапка `.` є спеціальним символом, який збігається з усіма, нам спочатку потрібно вимкнути крапку перед `htm` за допомогою символу екранування `\\`. Це стосується всіх спеціальних символів.\\n\\nТепер додайте знак `$` у кінець виразу. Це гарантує, що текст, який буде відфільтровано, закінчується виразом, записаним перед ним.", - "lesson.regexForSeo.limitation.title": "Length Restrictions `{n}`", - "lesson.regexForSeo.limitation.description": "We may want to filter the results by character lengths. For example, to filter URLs that are `35` characters long, type the number you want to use for the length, `{35}`, using curly braces at the end of the period `.`.", + "lesson.regexForSeo.limitation.title": "Обмеження по довжині `{n}`", + "lesson.regexForSeo.limitation.description": "Можливо, ви захочете відфільтрувати результати за довжиною символів. Наприклад, щоб відфільтрувати URL-адреси довжиною `35` символів, введіть число, яке ви хочете використовувати для довжини, `{35}`, використовуючи фігурні дужки в кінці періоду `.`.", - "lesson.regexForSeo.maxLimitation.title": "Length Restrictions (Maximum) `{n,m}`", - "lesson.regexForSeo.maxLimitation.description": "To filter URLs with a maximum length of `35` characters, type `{1,35}` the minimum and maximum number values we will use for the length, using curly braces at the end of the period `.`.", + "lesson.regexForSeo.maxLimitation.title": "Обмеження по довжині (Максимум) `{n,m}`", + "lesson.regexForSeo.maxLimitation.description": "Щоб відфільтрувати URL-адреси з максимальною довжиною `35` символів, введіть `{1,35}` мінімальне і максимальне значення довжини, які ми будемо використовувати для довжини, використовуючи фігурні дужки в кінці періоду `.`.", - "lesson.regexForSeo.minLimitation.title": "Length Restrictions (Minumum) `{n,}`", - "lesson.regexForSeo.minLimitation.description": "To filter URLs with a minimum length of `35` characters, type `{35,}` using curly braces at the end of the period and ending with a comma for the minimum number value we will use for the length.", + "lesson.regexForSeo.minLimitation.title": "Обмеження по довжині (Мінімум) `{n,}`", + "lesson.regexForSeo.minLimitation.description": "Щоб відфільтрувати URL-адреси з мінімальною довжиною `35` символів, введіть `{35,}`, використовуючи фігурні дужки в кінці періоду і закінчуючи кому для мінімального числового значення, яке ми будемо використовувати для довжини.", - "lesson.regexForSeo.robots.title": "robots.txt (regex-like syntax)", - "lesson.regexForSeo.robots.description": "Here is an example of regex-like usage in the `robots.txt` file. The example states that bots should not crawl links with the extension `pdf`.", + "lesson.regexForSeo.robots.title": "robots.txt (Regexp-подібний синтаксис)", + "lesson.regexForSeo.robots.description": "Ось приклад regex-подібного використання у файлі `robots.txt`. У прикладі вказано, що боти не повинні сканувати посилання з розширенням `pdf`.", "lesson.regexForSeo.htaccess.title": ".htaccess", - "lesson.regexForSeo.htaccess.description": "Here is an example of using regex in the `.htaccess` file. In the example, `php` extension links are directed to `html` extensions with `301` code.", + "lesson.regexForSeo.htaccess.description": "Ось приклад використання regex у файлі `.htaccess`. У прикладі посилання з розширенням `php` перенаправляються на розширення `html` з кодом `301`.", - "lesson.regexForSeo.outro.title": "Outro", - "lesson.regexForSeo.outro.description": "Regex knowledge is a skill that increases productivity on any platform that allows you to use regex. Once you start using it and improve this skill, it will help you complete many repetitive tasks faster and save time for other things. To better understand the basics of Regex, you can visit the `Regex 101` tutorial. You can use the `Playground` page to test your expressions on your texts." + "lesson.regexForSeo.outro.title": "Додаткова інформація", + "lesson.regexForSeo.outro.description": "Знання regex - це навичка, яка підвищує продуктивність на будь-якій платформі, що дозволяє використовувати regex. Як тільки ви почнете використовувати його і вдосконалите цю навичку, вона допоможе вам швидше виконувати багато повторюваних завдань і заощадити час для інших справ. Щоб краще зрозуміти основи Regex, ви можете відвідати підручник `Regex 101`. Ви можете скористатися сторінкою `Playground`, щоб протестувати ваші вирази на текстах." } From f427b87a385bd5c80013c9c4752938cfad389021 Mon Sep 17 00:00:00 2001 From: Andrey Zontov Date: Thu, 23 Mar 2023 15:37:54 +0200 Subject: [PATCH 28/62] =?UTF-8?q?[Ukrainian]=20Change=20`'`=20to=20`=CA=BC?= =?UTF-8?q?`=20in=20`/uk/learn.json`=20(#293)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I made these changes in past PRs, but you had already merged them before I had time to upload them. --- src/localization/uk/learn.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/localization/uk/learn.json b/src/localization/uk/learn.json index 8a6f0e80..9131dd71 100644 --- a/src/localization/uk/learn.json +++ b/src/localization/uk/learn.json @@ -57,7 +57,7 @@ "steps.plusCharacter.description": "Щоб вказати, що символ може зустрічатися один або кілька разів, ми ставимо знак плюс `+` в кінці. Наприклад, вказуємо, що літера `e` може зустрічатися один або кілька разів у тексті.", "steps.questionMark.title": "Знак питання `?`", - "steps.questionMark.description": "Щоб вказати, що символ є необов'язковим, ми ставимо наприкінці знак запитання `?`. Наприклад, вказуємо, що наступна літера `u` не є обов'язковою.", + "steps.questionMark.description": "Щоб вказати, що символ є необовʼязковим, ми ставимо наприкінці знак запитання `?`. Наприклад, вказуємо, що наступна літера `u` не є обовʼязковою.", "steps.quantifier.title": "Фігурні дужки - 1", "steps.quantifier.description": "Щоб висловити певну кількість входжень символу, ми пишемо фігурні дужки `{n}` разом із значенням, скільки разів ми хочемо, щоб він зустрічався наприкінці. Наприклад, вкажіть, що наступна літера `e` може зустрічатися лише `2` рази.", @@ -75,7 +75,7 @@ "examples.plusCharacter.description": "Напишіть вираз, використовуючи знак плюса `+` для вибору слів, у яких буква `e` зустрічається в тексті один або кілька разів.", "examples.questionMark.title": "Практика: Знак питання `?`", - "examples.questionMark.description": "Напишіть вираз, що вказує, що літера `n` необов'язкова у тексті, використовуючи знак запитання `?`. Таким чином, можна вибрати обидва слова `a` та `an`.", + "examples.questionMark.description": "Напишіть вираз, що вказує, що літера `n` необовʼязкова у тексті, використовуючи знак запитання `?`. Таким чином, можна вибрати обидва слова `a` та `an`.", "examples.quantifier.title": "Практика: Фігурні дужки - 1", "examples.quantifier.description": "Запишіть вираз, використовуючи фігурні дужки `{}`, щоб вибрати в тексті 4-х значні числа від `0` до `9`.", From 48f3479a980dbf869675190f096e292cc80429d0 Mon Sep 17 00:00:00 2001 From: Halil Atilla Date: Tue, 4 Apr 2023 09:28:41 +0300 Subject: [PATCH 29/62] Update README.md (#297) --- README.md | 74 +++++++++++++++++++++++++++---------------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index d27a70b2..0c3f6098 100644 --- a/README.md +++ b/README.md @@ -1,58 +1,58 @@ -# [regexlearn.com](https://regexlearn.com) +# **🔓 [regexlearn.com](http://regexlearn.com/): Unlock the Secrets of Regex** -This is a project that makes learning how to write regex easy. -## Features +Embark on an exciting journey to learn and master regular expressions with **[regexlearn.com](https://regexlearn.com/)**. Our engaging, step-by-step approach and feature-rich platform ensure a smooth learning experience that will have you writing regex like a pro in no time! -- **Step by Step Learn** -- **Interactive** -- **Shortcut Friendly** -- **Cheatsheet** -- **Playground** -- Practice _(Soon)_ - -## Available Languages +
-- **English** -- **Turkish** -- **Russian** -- **Spanish** -- **Chinese** -- **German** -- **Ukrainian** -- **French** -- _Korean_ [(Requested)](https://github.com/aykutkardas/regexlearn.com/issues/92) -- _Arabic_ [(Requested)](https://github.com/aykutkardas/regexlearn.com/issues/163) -- _Brazilian Portuguese_ [(Requested)](https://github.com/aykutkardas/regexlearn.com/issues/39) -- _Georgian_ [(Requested)](https://github.com/aykutkardas/regexlearn.com/issues/274) +## **🌟 Features** -_Please create an issue to add your own language._ +- **🚶 Step-by-Step Learning:** Progress through thoughtfully crafted lessons and examples at your own pace, catering to both beginners and experienced users. +- **🎓 Interactive:** Immerse yourself in hands-on activities to reinforce your understanding and boost retention. +- **🚀 Shortcut Friendly:** Uncover valuable shortcuts and tips that will streamline and optimize your regex-writing process. +- **📚 Cheatsheet:** Keep a handy, concise summary of regex syntax and usage at your fingertips for quick reference. +- **🔬 Playground:** Freely experiment and test your regex patterns in a dedicated sandbox environment without limitations. +- **💡 Practice:** Coming soon - Challenge yourself with a wide range of practical exercises to refine and enhance your regex skills.
-

Our Sponsors

+## **🌍 Supported Languages** + +**[regexlearn.com](http://regexlearn.com/)** is available in the following languages, with more on the way: + +- 🇺🇸 English +- 🇹🇷 Turkish +- 🇷🇺 Russian +- 🇪🇸 Spanish +- 🇨🇳 Chinese +- 🇩🇪 German +- 🇺🇦 Ukrainian +- 🇫🇷 French +- 🇰🇷 Korean [(Requested)](https://github.com/aykutkardas/regexlearn.com/issues/92) +- 🇦🇪 Arabic [(Requested)](https://github.com/aykutkardas/regexlearn.com/issues/163) +- 🇧🇷 Brazilian Portuguese [(Requested)](https://github.com/aykutkardas/regexlearn.com/issues/39) +- 🇬🇪 Georgian [(Requested)](https://github.com/aykutkardas/regexlearn.com/issues/274) -

- - - - - - -

+Interested in adding your language? Please **[create an issue](https://github.com/aykutkardas/regexlearn.com/issues/new)** and let us know! -

Sponsoring

+
-

This project is developed as open-source in our spare time. Contact to support and appear as a sponsor.

+## Our Sponsors -

Buy Me a Coffee!

+[![Ahrefs](preview/ahrefs.png)](https://ahrefs.com/) [![Wope](preview/wope.png)](https://wope.com)
-

Preview

+## **💖 Sponsorship** + +This project is a labor of love, developed as open-source during our free time. If you'd like to support our mission and be featured as a sponsor, please **[contact us](mailto:aykutkrds@gmail.com)**. Your generous contribution allows us to continue enhancing regexlearn.com, fostering growth and learning within the community. + +[!["Buy Me A Coffee"](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/aykutkardas)
+## Preview + ![Preview](preview/preview-landing.png) ![Preview](preview/preview-learn.png) From 981839beb6e2e52ad8179facf5bc9de05ad138bd Mon Sep 17 00:00:00 2001 From: Anshi Date: Wed, 3 May 2023 21:19:43 +0800 Subject: [PATCH 30/62] [Chinese] Update /zh-cn/learn.json (#298) Easier to learn the words --- src/localization/zh-cn/learn.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/localization/zh-cn/learn.json b/src/localization/zh-cn/learn.json index b5c35aab..af0b9983 100644 --- a/src/localization/zh-cn/learn.json +++ b/src/localization/zh-cn/learn.json @@ -78,7 +78,7 @@ "examples.questionMark.description": "请编写表达式,用 `?` 表示字母 `n` 在文本中是可选的,使 `a` 和 `an` 都可以匹配到。", "examples.quantifier.title": "练习:大括号 - 1", - "examples.quantifier.description": "用 `{}` 编写表达式,匹配文本中的 `4` 位阿拉伯数字。", + "examples.quantifier.description": "用 `{}` 编写表达式,匹配文本中,位数为 `4` 的阿拉伯数字。", "examples.quantifierMin.title": "练习:大括号 - 2", "examples.quantifierMin.description": "用 `{}` 编写表达式,匹配文本中,位数至少为 `2` 的阿拉伯数字。", From 70d8c01a9acf9d42392657eaecf67ed7d7e8b144 Mon Sep 17 00:00:00 2001 From: S M Khalilullah <14842230+smkbd@users.noreply.github.com> Date: Sun, 7 May 2023 19:49:07 +0600 Subject: [PATCH 31/62] Fix grammar in en/general.json (#305) --- .gitignore | 3 ++- src/localization/en/general.json | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 3f3016c3..6525c420 100644 --- a/.gitignore +++ b/.gitignore @@ -23,5 +23,6 @@ yarn-debug.log* yarn-error.log* .firebase .vscode +.idea .next -out \ No newline at end of file +out diff --git a/src/localization/en/general.json b/src/localization/en/general.json index c38b5c77..0fd4910e 100644 --- a/src/localization/en/general.json +++ b/src/localization/en/general.json @@ -35,5 +35,5 @@ "page.cheatsheet.description": "Sometimes you just need to remember Regex. Try the cheatsheet that will make it easier for you to understand and remember better.", "page.playground.description": "You can easily build and test your regex pattern online via Playground.", - "learn.safari.unsupportWarning": "Regex in this step are not supported by the some browsers. If you have trouble getting past this step. You can click here." -} \ No newline at end of file + "learn.safari.unsupportWarning": "Regex in this step are not supported by the some browsers. If you have trouble getting past this step, you can click here." +} From e8ac1d807605fa1ef9ac33a0186dc1be13e4b959 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E5=B0=8F=E5=AE=89?= Date: Sat, 15 Jul 2023 15:44:19 +0800 Subject: [PATCH 32/62] style:button chinese text wrap (#314) --- src/components/PlaygroundEditor.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/PlaygroundEditor.tsx b/src/components/PlaygroundEditor.tsx index db0baf1b..575c64c0 100644 --- a/src/components/PlaygroundEditor.tsx +++ b/src/components/PlaygroundEditor.tsx @@ -229,7 +229,7 @@ const Playground = () => {
{isLearnDetail &&
(
-
- - Powered by - Altogic - - +
Date: Thu, 2 Nov 2023 09:07:59 +0300 Subject: [PATCH 48/62] 2.26.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4f166b16..99d69e8f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "regexlearn", - "version": "2.25.3", + "version": "2.26.0", "author": { "name": "Aykut Kardaş", "email": "aykutkrds@gmail.com" From e92fd2d39b983b5db8914cc5739f7ae59531f250 Mon Sep 17 00:00:00 2001 From: jmalbertsanofi <103415948+jmalbertsanofi@users.noreply.github.com> Date: Thu, 2 Nov 2023 15:25:40 +0100 Subject: [PATCH 49/62] FR: Correct typo (#327) --- src/localization/fr/learn.json | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/localization/fr/learn.json b/src/localization/fr/learn.json index 23f91522..47e1302a 100644 --- a/src/localization/fr/learn.json +++ b/src/localization/fr/learn.json @@ -2,7 +2,7 @@ "examples.starter.title": "Pratiquer", "examples.starter.description": "Maintenant il est temps de pratiquer pour consolider ce que vous avez appris.", - "examples.finish.title": "Pratique terminée!", + "examples.finish.title": "Pratique terminée !", "examples.finish.description": " ", "steps.starter.title": "Introduction", @@ -23,7 +23,7 @@ "steps.negatedCharacterSet.title": "Jeux de caractères négatifs `[^abc]`", "steps.negatedCharacterSet.description": "Pour trouver tous les mots du texte ci-dessous, à l'exception de `ber` et `bor`, tapez `e` et `o` successivement après le signe d'insertion `^` entre crochets `[]`.", - "steps.range.title": "Plage de lettres `[a-z]`", + "steps.range.title": "Plage de lettres `[a-z]`", "steps.range.description": "Pour trouver les lettres dans l'intervalle spécifié, la lettre de départ et la lettre d'arrivée sont écrites entre crochets `[]` avec un tiret entre les deux `-`. Cette expression est sensible à la casse. Tapez l'expression qui sélectionnera toutes les lettres minuscules entre `e` et `o`, y compris elles-mêmes.", "steps.rangeNumber.title": "Plage de nombres `[0-9]`", @@ -32,10 +32,10 @@ "examples.basicMatchers.title": "Pratique : Correspondance de base", "examples.basicMatchers.description": "Ecrivez l'expression qui sélectionnera les mots `of` dans le texte.", - "examples.dotCharacter.title": "Pratique: Tous les caractères", + "examples.dotCharacter.title": "Pratique : Tous les caractères", "examples.dotCharacter.description": "Tapez l'expression pour sélectionner des lettres, des chiffres, des espaces et des caractères spéciaux dans le texte. L'expression que vous tapez doit correspondre à n'importe quel caractère.", - "examples.characterSet.title": "Practique: Jeux de caractères", + "examples.characterSet.title": "Pratique : Jeux de caractères", "examples.characterSet.description": "Écrivez la phrase qui correspond à chaque mot du texte. Les seuls caractères qui changent sont les initiales des mots.", "examples.negatedCharacterSet.title": "Pratique : Jeux de caractères négatifs", @@ -44,7 +44,7 @@ "examples.range.title": "Pratique : Plage de lettres", "examples.range.description": "Écrivez l'expression qui sélectionnera les lettres de `g` à `k` dans le texte. \\n Les lettres `g` et `k` doivent également être incluses dans cette plage.", - "examples.rangeNumber.title": "Practique: Plage de nombre", + "examples.rangeNumber.title": "Pratique : Plage de nombre", "examples.rangeNumber.description": "Tapez une expression pour sélectionner les nombres de `2` à `7` dans le texte.\\n Les chiffres 2 et 7 devraient également être inclus dans cette fourchette.", "steps.repetitions.title": "Répétitions", @@ -68,22 +68,22 @@ "steps.quantifierRange.title": "Accolades - 3", "steps.quantifierRange.description": "Pour exprimer l'occurrence d'un caractère dans une certaine plage de nombres, on écrit entre accolades `{x,y}` l'intervalle que l'on veut aller jusqu'au bout. Par exemple, indiquez que la lettre suivante `e` ne peut apparaître qu'entre `1` et `3`.", - "examples.asterisk.title": "Pratique: Astérisque `*`", + "examples.asterisk.title": "Pratique : Astérisque `*`", "examples.asterisk.description": "Utilisez l'astérisque `*` pour écrire l'expression qui sélectionnera chaque mot, en tenant compte de l'absence de la lettre `e` dans le texte et de la présence de plusieurs mots.", - "examples.plusCharacter.title": "Practice: Signe Plus `+`", + "examples.plusCharacter.title": "Pratique : Signe Plus `+`", "examples.plusCharacter.description": "Écrivez l'expression en utilisant le signe plus `+` pour sélectionner les mots dans lesquels la lettre `e` apparaît une ou plusieurs fois dans le texte.", - "examples.questionMark.title": "Practique: Point d'interrogation `?`", + "examples.questionMark.title": "Pratique : Point d'interrogation `?`", "examples.questionMark.description": "Écrivez l'expression indiquant que la lettre `n` est facultative dans le texte, en utilisant le point d'interrogation `?`. Ainsi, les deux mots `a` et `an` peuvent être sélectionnés.", - "examples.quantifier.title": "Practique: Accolades - 1", + "examples.quantifier.title": "Pratique : Accolades - 1", "examples.quantifier.description": "Écrivez l'expression utilisant les accolades `{}` qui trouvera les textes contenant les chiffres `4` chiffres successifs. Pour rappel, la plage `[0-9]` correspondra à un seul chiffre.", - "examples.quantifierMin.title": "Practique: Accolades - 2", + "examples.quantifierMin.title": "Pratique : Accolades - 2", "examples.quantifierMin.description": "Écrivez l'expression utilisant les accolades `{}` qui trouvera les textes contenant au moins `2` chiffres successifs.", - "examples.quantifierRange.title": "Practique: Accolades - 3", + "examples.quantifierRange.title": "Pratique : Accolades - 3", "examples.quantifierRange.description": "Écrivez l'expression utilisant les accolades `{}` qui trouvera les textes contenant au moins `1` et au plus `4` chiffres successifs.", "steps.grouping.title": "Parenthèses `( )`: Grouper", @@ -128,16 +128,16 @@ "steps.lookarounds.title": "Regard autour", "steps.lookarounds.description": "Si nous voulons que la phrase que nous écrivons soit placée avant ou après une autre phrase, nous devons utiliser la fonction \"contourner\". Passez à l'étape suivante pour apprendre à \"contourner\".", - "steps.positiveLookahead.title": "Regard avant Positif: `(?=)`", + "steps.positiveLookahead.title": "Regard avant Positif : `(?=)`", "steps.positiveLookahead.description": "Par exemple, nous voulons sélectionner la valeur de l'heure dans le texte. Par conséquent, pour ne sélectionner que les valeurs numériques qui ont `PM` après elles, nous devons écrire l'expression positive look-ahead `(?=)` après notre expression. Incluez `PM` après le signe `=` à l'intérieur des parenthèses.", - "steps.negativeLookahead.title": "Regard avant Négatif: `(?!)`", + "steps.negativeLookahead.title": "Regard avant Négatif : `(?!)`", "steps.negativeLookahead.description": "Par exemple, nous voulons sélectionner des chiffres autres que la valeur de l'heure dans le texte. Par conséquent, nous devons écrire l'expression négative `( ?!)` après notre expression pour sélectionner uniquement les valeurs numériques qui n'ont pas `PM` après elles. Inclure `PM` après le signe `!` à l'intérieur des parenthèses", - "steps.positiveLookbehind.title": "Regard derrière positif: `(?<=)`", + "steps.positiveLookbehind.title": "Regard derrière Positif : `(?<=)`", "steps.positiveLookbehind.description": "Par exemple, nous voulons sélectionner la valeur du prix dans le texte. Par conséquent, pour sélectionner uniquement les valeurs numériques précédées de `$`, nous devons écrire l'expression positive lookbehind `(?<=)` avant notre expression. Ajoutez `\\$` après le signe `=` à l'intérieur des parenthèses.", - "steps.negativeLookbehind.title": "Regard derrière négatif: `(?<!)`", + "steps.negativeLookbehind.title": "Regard derrière Négatif : `(?<!)`", "steps.negativeLookbehind.description": "Par exemple, nous voulons sélectionner des chiffres dans le texte autres que la valeur du prix. Par conséquent, pour sélectionner uniquement les valeurs numériques qui ne sont pas précédées de `$`, nous devons écrire le lookbehind négatif `(?< !)` avant notre expression. Ajoutez `\\$` après le `!` à l'intérieur des parenthèses.", "steps.flags.title": "Drapeaux", From 1976677dd13851c7e6ffdb5b55b4993ba8245cfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Wed, 6 Dec 2023 09:10:11 +0300 Subject: [PATCH 50/62] feat: update sponsor --- src/data/lessons/index.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/data/lessons/index.json b/src/data/lessons/index.json index c688a814..78002b7f 100644 --- a/src/data/lessons/index.json +++ b/src/data/lessons/index.json @@ -15,9 +15,10 @@ "slug": "regex-for-seo", "title": "lessons.regexForSeo.title", "description": "lessons.regexForSeo.description", - "sponsor": "ahrefs", - "sponsorURL": "https://ahrefs.com/?utm_source=regexlearn&utm_medium=referral&utm_campaign=sponsorship", - "sponsorLogo": "/ahrefs.webp", + "sponsor": "Wope", + "sponsorURL": "https://wope.com/?utm_source=regexlearn&utm_medium=referral&utm_campaign=sponsorship", + "sponsorLogo": "/wope.webp", + "logoHeight": 16, "stepCount": 17, "videoCount": 9 } From e5deba5200965365aba3f4dde454280069c365ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Wed, 6 Dec 2023 09:10:25 +0300 Subject: [PATCH 51/62] 2.26.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 99d69e8f..f993dbf6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "regexlearn", - "version": "2.26.0", + "version": "2.26.1", "author": { "name": "Aykut Kardaş", "email": "aykutkrds@gmail.com" From 2b934aa4a1bcac02cfd235802798858209b0fde9 Mon Sep 17 00:00:00 2001 From: Danilo P <73405593+danilopsss@users.noreply.github.com> Date: Sun, 17 Dec 2023 10:41:34 +0100 Subject: [PATCH 52/62] feat: Translation to brazilian portuguese (#330) Adding the full translation for Brazilian Portuguese. This PR replaces the https://github.com/aykutkardas/regexlearn.com/pull/139 which was incomplete --- README.md | 2 +- src/localization/index.ts | 1 + src/localization/pt-br/cheatsheet.json | 70 ++++++++ src/localization/pt-br/general.json | 39 +++++ src/localization/pt-br/index.js | 17 ++ src/localization/pt-br/landing.json | 26 +++ src/localization/pt-br/learn.json | 162 ++++++++++++++++++ src/localization/pt-br/lessons.json | 7 + .../pt-br/lessons/regexForSeo.json | 48 ++++++ 9 files changed, 371 insertions(+), 1 deletion(-) create mode 100644 src/localization/pt-br/cheatsheet.json create mode 100644 src/localization/pt-br/general.json create mode 100644 src/localization/pt-br/index.js create mode 100644 src/localization/pt-br/landing.json create mode 100644 src/localization/pt-br/learn.json create mode 100644 src/localization/pt-br/lessons.json create mode 100644 src/localization/pt-br/lessons/regexForSeo.json diff --git a/README.md b/README.md index bcb17902..838d2616 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ the way: - 🇵🇱 Polish - 🇰🇷 Korean - 🇦🇪 Arabic [(Requested)](https://github.com/aykutkardas/regexlearn.com/issues/163) -- 🇧🇷 Brazilian Portuguese [(Requested)](https://github.com/aykutkardas/regexlearn.com/issues/39) +- 🇧🇷 Brazilian Portuguese - 🇬🇪 Georgian [(Requested)](https://github.com/aykutkardas/regexlearn.com/issues/274) Interested in adding your language? Please diff --git a/src/localization/index.ts b/src/localization/index.ts index c35de6ae..d11ba5c3 100644 --- a/src/localization/index.ts +++ b/src/localization/index.ts @@ -9,6 +9,7 @@ export const langNames = { uk: '🇺🇦', ko: '🇰🇷', pl: '🇵🇱', + 'pt-br': '🇧🇷', }; export const defaultLocale = 'en'; diff --git a/src/localization/pt-br/cheatsheet.json b/src/localization/pt-br/cheatsheet.json new file mode 100644 index 00000000..b26d0e25 --- /dev/null +++ b/src/localization/pt-br/cheatsheet.json @@ -0,0 +1,70 @@ +{ + "cheatsheet.section.title": "Cheat Sheet de Regex", + "cheatsheet.section.description": "Explore todos os padrões e símbolos de Regex com o Cheat Sheet", + + "cheatsheet.anchors": "Âncoras", + "cheatsheet.caret.title": "Início da string ou linha", + "cheatsheet.caret.description": "Corresponde ao início da string ou linha.", + "cheatsheet.dollar.title": "Fim da string ou linha", + "cheatsheet.dollar.description": "Corresponde ao fim da string ou linha.", + "cheatsheet.wordBoundary.title": "Limite de palavra", + "cheatsheet.wordBoundary.description": "Corresponde ao caractere de palavra ou à posição no final de uma palavra.", + "cheatsheet.notWordBoundary.title": "Sem limite de palavra", + "cheatsheet.notWordBoundary.description": "Corresponde a um caractere de palavra ou a uma posição que não está no final de uma palavra.", + + "cheatsheet.characterClasses": "Classes de caracteres", + "cheatsheet.characterSet.title": "Conjunto de caracteres", + "cheatsheet.characterSet.description": "Corresponde a qualquer caractere no conjunto.", + "cheatsheet.negatedCharacterSet.title": "Conjunto de caracteres negados", + "cheatsheet.negatedCharacterSet.description": "Corresponde a qualquer caractere que não está no conjunto.", + "cheatsheet.range.title": "Intervalo", + "cheatsheet.range.description": "Corresponde a todos os caracteres entre dois caracteres, incluindo os mesmos.", + "cheatsheet.dot.title": "Ponto", + "cheatsheet.dot.description": "Corresponde a qualquer caractere, exceto quebras de linha.", + "cheatsheet.word.title": "Palavra", + "cheatsheet.word.description": "Corresponde a qualquer caractere alfanumérico, incluindo o sublinhado.", + "cheatsheet.notWord.title": "Sem palavra", + "cheatsheet.notWord.description": "Corresponde a qualquer caractere não alfanumérico.", + "cheatsheet.digit.title": "Dígito", + "cheatsheet.digit.description": "Corresponde a qualquer caractere numérico.", + "cheatsheet.notDigit.title": "Sem dígito", + "cheatsheet.notDigit.description": "Corresponde a qualquer caractere não numérico.", + "cheatsheet.space.title": "Espaço em branco", + "cheatsheet.space.description": "Corresponde a qualquer caractere de espaço em branco.", + "cheatsheet.notSpace.title": "Sem espaço em branco", + "cheatsheet.notSpace.description": "Corresponde a qualquer caractere que não seja um espaço em branco.", + + "cheatsheet.flags": "Flags", + "cheatsheet.caseInsensitiveFlag.title": "Ignorar maiúsculas e minúsculas", + "cheatsheet.caseInsensitiveFlag.description": "Faz com que a expressão ignore maiúsculas e minúsculas.", + "cheatsheet.globalFlag.title": "Global", + "cheatsheet.globalFlag.description": "Garante que a expressão não pare na primeira correspondência.", + "cheatsheet.multilineFlag.title": "Multilinha", + "cheatsheet.multilineFlag.description": "Se não estiver habilitado, início de linha e fim são equivalentes ao início e fim da string completa. Não funciona para cada linha individualmente.", + + "cheatsheet.groupAndReferences": "Grupos e Referências", + "cheatsheet.group.title": "Grupo", + "cheatsheet.group.description": "Agrupa uma expressão.", + "cheatsheet.reference.title": "Referência", + "cheatsheet.reference.description": "Referencia uma expressão agrupada.", + "cheatsheet.nonCapturingGroup.title": "Grupo de não captura", + "cheatsheet.nonCapturingGroup.description": "Cria um grupo que não pode ser referenciado.", + + "cheatsheet.lookarounds": "Lookarounds", + "cheatsheet.positiveLookahead.title": "Lookahead positivo", + "cheatsheet.negativeLookahead.title": "Lookahead negativo", + "cheatsheet.positiveLookbehind.title": "Lookbehind positivo", + "cheatsheet.negativeLookbehind.title": "Lookbehind negativo", + + "cheatsheet.quantifiersAndAlternation": "Quantificadores e Alternância", + "cheatsheet.plus.title": "Mais", + "cheatsheet.plus.description": "A expressão corresponde a um ou mais.", + "cheatsheet.asterisk.title": "Asterisco", + "cheatsheet.asterisk.description": "A expressão corresponde a zero ou mais.", + "cheatsheet.quantifier.title": "Quantificador", + "cheatsheet.quantifier.description": "A expressão corresponde aos intervalos especificados.", + "cheatsheet.optional.title": "Opcional", + "cheatsheet.optional.description": "Torna a expressão opcional.", + "cheatsheet.alternation.title": "Alternância", + "cheatsheet.alternation.description": "Funciona como um OU. Aguarda uma das expressões correspondentes." +} diff --git a/src/localization/pt-br/general.json b/src/localization/pt-br/general.json new file mode 100644 index 00000000..82a41ee9 --- /dev/null +++ b/src/localization/pt-br/general.json @@ -0,0 +1,39 @@ +{ + "general.prev": "Anterior", + "general.next": "Próximo", + "general.result": "Resultado", + "general.regex": "Expressão Regular", + "general.text": "Texto", + "general.watch": "Relógio", + "general.start": "Iniciar", + "general.continue": "Continuar", + "general.completedStep": "Passo Concluído!", + "general.hintQuestion": "Mostrar resposta", + "general.reportStep": "Reportar um problema", + "general.startLearning": "Começar a aprender", + "general.comingSoon": "Em breve", + "general.becomeSponsor": "Torne-se um patrocinador", + "general.learn": "Aprender", + "general.playground": "Playground", + "general.cheatsheet": "Cheatsheet", + "general.ourSponsors": "Nossos patrocinadores", + "general.share": "Compartilhar", + "general.shareLinkCopied": "Link de compartilhamento copiado!", + "general.somethingWentWrong": "Algo deu errado!", + + "notFound.intro": "A página que você está procurando não existe.", + "notFound.button": "Voltar para a página inicial", + + "page.landing.title": "Regex Learn - Passo a passo, do básico ao avançado.", + "page.learn.title": "Regex Learn - Curso Interativo de Expressões Regulares", + "page.cheatsheet.title": "Regex Learn - Cheatsheet de Expressões Regulares", + "page.playground.title": "Regex Learn - Playground", + "page.404.title": "Regex Learn - Página não encontrada", + + "page.landing.description": "Aprenda Expressões Regulares de forma interativa, pratique no seu próprio ritmo, teste e compartilhe suas próprias Expressões Regulares", + "page.learn.description": "Aprenda Expressões Regulares passo a passo. Complete o tutorial interativo que tornará seu aprendizado mais fácil e rápido.", + "page.cheatsheet.description": "Às vezes você só precisa lembrar da sintaxe das Expressões Regulares. Experimente a Cheatsheet, que facilitará o entendimento e a memorização.", + "page.playground.description": "Você pode criar e testar facilmente seu padrão de Expressões Regulares online através do Playground.", + + "learn.safari.unsupportWarning": "A Expressão Regular neste passo não é suportada por alguns navegadores. Se você estiver tendo problemas para passar por este passo, clique aqui." +} diff --git a/src/localization/pt-br/index.js b/src/localization/pt-br/index.js new file mode 100644 index 00000000..a30a668d --- /dev/null +++ b/src/localization/pt-br/index.js @@ -0,0 +1,17 @@ +import cheatsheet from './cheatsheet.json'; +import general from './general.json'; +import landing from './landing.json'; +import learn from './learn.json'; +import lessons from './lessons.json'; +import regexForSeo from './lessons/regexForSeo.json'; + +const messages = { + ...cheatsheet, + ...general, + ...landing, + ...learn, + ...lessons, + ...regexForSeo, +}; + +export default messages; diff --git a/src/localization/pt-br/landing.json b/src/localization/pt-br/landing.json new file mode 100644 index 00000000..b5f79775 --- /dev/null +++ b/src/localization/pt-br/landing.json @@ -0,0 +1,26 @@ +{ + "landing.title": "Aprenda Regex passo a passo, do básico ao avançado.", + "landing.description": "Aprender Regex é mais fácil do que você pensa. Você pode usar esta ferramenta para `aprender`, `praticar`, `testar` e `compartilhar` Regex.", + "landing.imageAltText": "Ilustração de um homem relaxado com as pernas sobre a mesa.", + + "section.learn.title": "Aprender", + "section.learn.content": "`Expressões Regulares`, abreviadas como Regex ou Regexp, são uma sequência de caracteres criada dentro de um conjunto de regras sintáticas do Regex. Você pode facilmente manipular seus dados com Regex, que utiliza comandos como encontrar, combinar e editar. Regex pode ser usado em linguagens de programação como Python, SQL, JavaScript, R, Google Analytics, Google Data Studio e em todo o processo de codificação. Aprenda regex online com exemplos e tutoriais no Regexlearn agora.", + "section.learn.imageAltText": "Ilustração de uma montanha com uma bandeira no topo.", + + "section.cheatsheet.button": "Revisar agora", + "section.cheatsheet.title": "Cheatsheet", + "section.cheatsheet.content": "Com o `Cheatsheet do RegexLearn`, você pode ver todos os usos necessários de uma vez e verificá-los diretamente na página. Explore todos os padrões e símbolos do Regex com o Cheatsheet.", + "section.cheatsheet.imageAltText": "Ilustração de um homem olhando páginas através de binóculos.", + + "section.playground.title": "Playground", + "section.playground.content": "Se você deseja gerar um Regex, pode construir e testar facilmente seu padrão de Regex através do Playground. Como um testador de Regex, você pode validar e compartilhar seu Regex com outros para trabalho colaborativo.", + "section.playground.imageAltText": "Ilustração de um gato prestes a derrubar um copo cheio.", + + "section.practice.title": "Praticar", + "section.practice.content": "Se você completou a parte de aprendizado, é hora de PRATICAR! Na seção de prática, você pode praticar seu conhecimento em Regex e fazer tutoriais com base no seu nível. Em breve.", + "section.practice.imageAltText": "Ilustração de uma mulher fazendo anotações de um livro.", + + "section.opensource.title": "Código aberto", + "section.opensource.content": "Regex Learn é um projeto de código aberto que recebe contribuições da comunidade e é gratuito para usar. Trabalhar neste projeto permite aprimorar suas habilidades, estudar e colaborar. Você pode contribuir e apoiar aqui.", + "section.opensource.imageAltText": "Ilustração de uma mulher, um homem e um gato montando peças de um quebra-cabeça." +} diff --git a/src/localization/pt-br/learn.json b/src/localization/pt-br/learn.json new file mode 100644 index 00000000..54639c01 --- /dev/null +++ b/src/localization/pt-br/learn.json @@ -0,0 +1,162 @@ +{ + "examples.starter.title": "Prática", + "examples.starter.description": "Agora é hora de praticar algo para consolidar o que aprendemos.", + + "examples.finish.title": "Prática concluída!", + "examples.finish.description": " ", + + "steps.starter.title": "Introdução", + "steps.starter.description": "Regex é a abreviação de `Expressão Regular`. Ajuda a fazer correspondência, buscar ou gerenciar texto. Comece digitando `OK` no campo Regex para avançar para a primeira etapa e acessar a descrição mais detalhada.", + + "steps.whatIsRegex.title": "O que são Expressões Regulares `Regex`?", + "steps.whatIsRegex.description": "Expressões regulares são uma sequência de caracteres que expressam um padrão de busca. Frequentemente abreviado como `Regex` ou `Regexp`. São usadas especialmente para encontrar ou substituir palavras em textos. Além disso, podemos testar se um texto atende às regras que estabelecemos.\\n\\n Por exemplo, digamos que você tenha uma lista de nomes de arquivos. E você só quer encontrar os arquivos com a extensão `pdf`. Após escrever a expressão `^\\w+\\.pdf$`, ela funcionará. O significado das definições nessa expressão ficará mais claro à medida que avançarmos nas etapas.", + + "steps.basicMatchers.title": "Matchers básicos", + "steps.basicMatchers.description": "O caractere ou palavra que queremos encontrar é escrito diretamente. É semelhante a um processo de busca normal. Por exemplo, para encontrar a palavra `curioso` no texto, escreva a mesma.", + + "steps.dotCharacter.title": "Ponto `.`: Qualquer caractere", + "steps.dotCharacter.description": "O ponto `.` permite selecionar qualquer caractere, incluindo caracteres especiais e espaços.", + + "steps.characterSet.title": "Conjuntos de caracteres `[abc]`", + "steps.characterSet.description": "Se um dos caracteres em uma palavra pode ser vários caracteres, escrevemos dentro de colchetes `[]` com todos os caracteres alternativos. Por exemplo, para escrever uma expressão que pode encontrar todas as palavras no texto, escreva os caracteres `a`, `e`, `i`, `o`, `u` consecutivamente dentro dos colchetes `[]`.", + + "steps.negatedCharacterSet.title": "Conjuntos de caracteres negados `[^abc]`", + "steps.negatedCharacterSet.description": "Para encontrar todas as palavras no texto abaixo, exceto `ber` e `bor`, escreva `e` e `o` lado a lado após o caractere circunflexo `^` dentro dos colchetes `[]`.", + + "steps.range.title": "Intervalo de letras `[a-z]`", + "steps.range.description": "Para encontrar letras em um intervalo especificado, a letra inicial e a letra final são escritas dentro de colchetes `[]` com um hífen `-` entre elas. É sensível a maiúsculas e minúsculas. Escreva a expressão que selecionará todas as letras minúsculas entre `e` e `o`, incluindo elas.", + + "steps.rangeNumber.title": "Intervalo de números `[0-9]`", + "steps.rangeNumber.description": "Para encontrar números em um intervalo especificado, o número inicial e o número final são escritos dentro de colchetes `[]` com um hífen `-` entre eles. Escreva uma expressão que selecionará todos os números entre `3` e `6`, incluindo eles.", + + "examples.basicMatchers.title": "Prática: Matcher básico", + "examples.basicMatchers.description": "Escreva a expressão que selecionará as letras `of` no texto.", + + "examples.dotCharacter.title": "Prática: Qualquer caractere", + "examples.dotCharacter.description": "Escreva a expressão para selecionar letras, números, espaços e caracteres especiais individuais no texto. A expressão que você escrever deve corresponder a qualquer caractere.", + + "examples.characterSet.title": "Prática: Conjunto de caracteres", + "examples.characterSet.description": "Escreva a frase que corresponderá a cada palavra no texto. Os únicos caracteres que mudam são as iniciais das palavras.", + + "examples.negatedCharacterSet.title": "Prática: Conjunto de caracteres negados", + "examples.negatedCharacterSet.description": "Escreva a expressão que corresponderá a qualquer coisa que não seja as palavras `beor` e `beur` no texto. Faça isso usando o conjunto de caracteres negados.", + + "examples.range.title": "Prática: Intervalo de letras", + "examples.range.description": "Escreva a expressão que selecionará as letras de `g` a `k` no texto.\\nas letras `g` e `k` também devem ser incluídas no intervalo.", + + "examples.rangeNumber.title": "Prática: Intervalo de números", + "examples.rangeNumber.description": "Escreva a expressão que selecionará os números de `2` a `7` no texto.\\n`2` e `7` também devem ser incluídos no intervalo.", + + "steps.repetitions.title": "Repetições", + "steps.repetitions.description": "Alguns caracteres especiais são usados para especificar quantas vezes um caractere se repete no texto. Esses caracteres especiais são o sinal de mais `+`, o asterisco `*` e o ponto de interrogação `?`.", + + "steps.asterisk.title": "Asterisco `*`", + "steps.asterisk.description": "Colocamos um asterisco `*` no início para indicar que um caractere não corresponde em absoluto ou pode corresponder várias vezes. Por exemplo, indica que a letra `e` nunca deve ocorrer no texto, ou pode ocorrer uma ou mais vezes consecutivas.", + + "steps.plusCharacter.title": "Sinal de mais `+`", + "steps.plusCharacter.description": "Para indicar que um caractere pode ocorrer uma ou mais vezes, colocamos o sinal de mais `+` no final. Por exemplo, indica que a letra `e` pode ocorrer uma ou mais vezes no texto.", + "steps.questionMark.title": "Sinal de Interrogação `?`", + "steps.questionMark.description": "Para indicar que um caractere é opcional, colocamos um sinal de interrogação `?` no final. Por exemplo, indica que a próxima letra `u` é opcional.", + + "steps.quantifier.title": "Chaves - 1", + "steps.quantifier.description": "Para expressar um certo número de ocorrências de um caractere, escrevemos chaves `{n}` junto com a quantidade de vezes que queremos que ocorra no final. Por exemplo, indica que a próxima letra `e` pode ocorrer apenas `2` vezes.", + + "steps.quantifierMin.title": "Chaves - 2", + "steps.quantifierMin.description": "Para expressar pelo menos um certo número de ocorrências de caractere, escrevemos no final do caractere quantas vezes queremos que ocorra, com uma vírgula `,` no final, e dentro das chaves `{n, }`. Por exemplo, indica que a próxima letra `e` pode ocorrer pelo menos `3` vezes.", + + "steps.quantifierRange.title": "Chaves - 3", + "steps.quantifierRange.description": "Para expressar a ocorrência de um caractere em um certo intervalo de números, escrevemos chaves `{x,y}` com o intervalo que queremos no final. Por exemplo, indica que a próxima letra `e` pode ocorrer entre `1` e `3` vezes.", + + "examples.asterisk.title": "Prática: Asterisco `*`", + "examples.asterisk.description": "Use o asterisco `*` para escrever a expressão que selecionará cada palavra, adequado para a ausência da letra `e` no texto e a presença de mais de uma.", + + "examples.plusCharacter.title": "Prática: Sinal de Mais `+`", + "examples.plusCharacter.description": "Escreva a expressão usando o sinal de mais `+` para selecionar palavras em que a letra `e` ocorre uma ou mais vezes no texto.", + + "examples.questionMark.title": "Prática: Sinal de Interrogação `?`", + "examples.questionMark.description": "Escreva a expressão indicando que a letra `n` é opcional no texto, usando o sinal de interrogação `?`. Portanto, ambas as palavras `a` e `an` podem ser selecionadas.", + + "examples.quantifier.title": "Prática: Chaves - 1", + "examples.quantifier.description": "Escreva a expressão usando chaves `{}` para selecionar `4` dígitos numéricos de `0` a `9` no texto.", + + "examples.quantifierMin.title": "Prática: Chaves - 2", + "examples.quantifierMin.description": "Escreva a expressão usando chaves `{}` para selecionar os números entre `0` e `9` que ocorrem pelo menos `2` vezes no texto.", + + "examples.quantifierRange.title": "Prática: Chaves - 3", + "examples.quantifierRange.description": "Escreva a expressão usando chaves`{}` para selecionar os números de `0` a `9` no texto que estão pelo menos entre `1` e `4`.", + + "steps.grouping.title": "Parênteses `( )`: Agrupamento", + "steps.grouping.description": "Podemos agrupar uma expressão e usar esses grupos para fazer referência ou impor algumas regras. Para agrupar uma expressão, a envolvemos `()` em parênteses. Por enquanto, apenas agrupamos `haa` abaixo.", + + "steps.groupReference.title": "Referenciando um grupo", + "steps.groupReference.description": "As palavras `ha` e `haa` são agrupadas abaixo. O primeiro grupo é usado escrevendo `\\1` para evitar reescrevê-lo. Aqui `1` denota a ordem do agrupamento. Escreva `\\2` no final de uma expressão para se referir ao segundo grupo.", + + "steps.nonCapturingGrouping.title": "Parênteses `(?: )`: Agrupamento Não Capturado", + "steps.nonCapturingGrouping.description": "Você pode agrupar uma expressão e garantir que ela não seja capturada por referências. Por exemplo, abaixo há dois grupos. No entanto, a primeira referência do grupo é denotada por `\\1` na verdade aponta para o segundo grupo, já que o primeiro é um grupo desconhecido.", + + "steps.pipeCharacter.title": "Caractere Pipe `|`", + "steps.pipeCharacter.description": "Permite especificar que uma expressão pode estar em diferentes expressões. Portanto, todas as declarações possíveis são escritas separadas pelo caractere Pipe `|`. Isso difere do charset `[abc]`, os charsets funcionam em nível de caractere. As alternativas estão em nível de expressão. Por exemplo, a seguinte expressão selecionaria tanto `cat` quanto `rat`. Adicione outro caractere pipe `|` no final de uma expressão e escreva `dog` para que todas as palavras sejam selecionadas.", + + "steps.escapeCharacter.title": "Caractere de Escape `\\`", + "steps.escapeCharacter.description": "Existem caracteres especiais que usamos ao escrever Regex. `{ } [ ] / \\ + * . $^ | ?` Antes de podermos selecionar esses caracteres, precisamos usar um caractere de escape `\\`. Por exemplo, para selecionar os caracteres ponto `.` e asterisco `*` no texto, adicionamos o caractere de escape `\\` antes deles.", + + "steps.caret.title": "Sinal de Circunflexo `^`: Seleção por Início de Linha", + "steps.caret.description": "Estamos usando `[0-9]` para encontrar números. Para encontrar apenas números no início de uma linha, prefixamos essa expressão com o sinal de circunflexo `^`.", + + "steps.dollar.title": "Sinal de Cifrão `$`: Seleção por Fim de Linha", + "steps.dollar.description": "Use o sinal de cifrão `$` após o valor `html` para encontrar o texto `html` apenas no final da linha.", + + "steps.wordCharacter.title": "Caractere de Palavra `\\w`: Letras, Números e Sublinhado", + "steps.wordCharacter.description": "A expressão `\\w` é usada para encontrar letras, números e sublinhados. Vamos usar a expressão `\\w` para encontrar o caractere de palavra no texto.", + + "steps.withoutWordCharacter.title": "Caractere Exceto Palavra `\\W`", + "steps.withoutWordCharacter.description": "A expressão `\\W` é usada para encontrar caracteres diferentes de letras, números e sublinhados.", + + "steps.numberCharacter.title": "Caractere Numérico `\\d`", + "steps.numberCharacter.description": "`\\d` é usado para encontrar apenas caracteres numéricos.", + + "steps.withoutNumberCharacter.title": "Exceto Caracteres Numéricos `\\D`", + "steps.withoutNumberCharacter.description": "`\\D` é usado para encontrar caracteres não numéricos.", + + "steps.spaceCharacter.title": "Caractere de Espaço `\\s`", + "steps.spaceCharacter.description": "`\\s` é usado para encontrar apenas caracteres de espaço.", + + "steps.withoutSpaceCharacter.title": "Exceto Caractere de Espaço `\\S`", + "steps.withoutSpaceCharacter.description": "`\\S` é usado para encontrar caracteres que não sejam de espaço.", + + "steps.lookarounds.title": "Lookarounds", + "steps.lookarounds.description": "Se quisermos que a frase que estamos escrevendo venha antes ou depois de outra frase, precisamos de um \"lookaround\". Continue para aprender a usar \"lookaround\".", + + "steps.positiveLookahead.title": "Lookahead Positivo: `(?=)`", + "steps.positiveLookahead.description": "Por exemplo, queremos selecionar o valor da hora no texto. Portanto, para selecionar apenas os valores numéricos que têm `PM` depois deles, precisamos escrever o lookahead positivo `(?=)` após nossa expressão. Inclua `PM` após o sinal de igual `=` entre parênteses.", + + "steps.negativeLookahead.title": "Lookahead Negativo: `(?!)`", + "steps.negativeLookahead.description": "Por exemplo, queremos selecionar números diferentes do valor da hora no texto. Portanto, devemos escrever o lookahead negativo `(?!)` após nossa expressão para selecionar apenas os valores numéricos que não têm `PM` depois. Inclua `PM` após o sinal de exclamação `!` entre parênteses.", + + "steps.positiveLookbehind.title": "Lookbehind Positivo: `(?<=)`", + "steps.positiveLookbehind.description": "Por exemplo, queremos selecionar o valor do preço no texto. Portanto, para selecionar apenas os valores numéricos precedidos por `$`, precisamos escrever o lookbehind positivo `(?<=)` antes de nossa expressão. Adicione `\\$` após o sinal de igual `=` entre parênteses.", + + "steps.negativeLookbehind.title": "Lookbehind Negativo: `(? Date: Sun, 17 Dec 2023 12:45:01 +0300 Subject: [PATCH 53/62] fix: lang flag and update lang fixer script --- scripts/html-lang-fixer.js | 2 +- src/localization/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/html-lang-fixer.js b/scripts/html-lang-fixer.js index 6eadc5c3..e62dbe29 100644 --- a/scripts/html-lang-fixer.js +++ b/scripts/html-lang-fixer.js @@ -15,7 +15,7 @@ function htmlLangFixer(path) { const stats = fs.lstatSync(currentPath); if (stats.isFile() && el.endsWith('.html')) { - const result = currentPath.match(/^\.\/out\/(en|es|de|tr|uk|fr|ru|pl|ko|zh-cn)\/?/); + const result = currentPath.match(/^\.\/out\/(en|es|de|tr|uk|fr|ru|pl|ko|zh-cn|pt-br)\/?/); if (result) { replaceLangTag(currentPath, result[1]); diff --git a/src/localization/index.ts b/src/localization/index.ts index d11ba5c3..4c5505a6 100644 --- a/src/localization/index.ts +++ b/src/localization/index.ts @@ -9,7 +9,7 @@ export const langNames = { uk: '🇺🇦', ko: '🇰🇷', pl: '🇵🇱', - 'pt-br': '🇧🇷', + 'pt-br': '🇵🇹', }; export const defaultLocale = 'en'; From fd9a91fce674cb9d168d2ef145802527ec168b70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Sun, 17 Dec 2023 12:45:15 +0300 Subject: [PATCH 54/62] 2.27.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f993dbf6..d0140a49 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "regexlearn", - "version": "2.26.1", + "version": "2.27.0", "author": { "name": "Aykut Kardaş", "email": "aykutkrds@gmail.com" From a725a097a2338197937b43cacff86a2de7c223c8 Mon Sep 17 00:00:00 2001 From: Victor Ferreira <69025753+Polymatheia-BR@users.noreply.github.com> Date: Sun, 17 Dec 2023 06:52:51 -0300 Subject: [PATCH 55/62] Add Brazilian Portuguese localization (#313) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Portuguese] Added pt-br Localization * Translation correction and Added pt-br on index --------- Co-authored-by: Aykut Kardaş From b17ff5f2d3b988c23eeda45c5ed69469f7acc75e Mon Sep 17 00:00:00 2001 From: Danilo P <73405593+danilopsss@users.noreply.github.com> Date: Fri, 5 Jan 2024 22:28:38 +0100 Subject: [PATCH 56/62] fixing to the correct flag, the previous one is from Portugal, not Brazil (#333) --- src/localization/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/localization/index.ts b/src/localization/index.ts index 4c5505a6..d11ba5c3 100644 --- a/src/localization/index.ts +++ b/src/localization/index.ts @@ -9,7 +9,7 @@ export const langNames = { uk: '🇺🇦', ko: '🇰🇷', pl: '🇵🇱', - 'pt-br': '🇵🇹', + 'pt-br': '🇧🇷', }; export const defaultLocale = 'en'; From 2ab71c091971ad0a228afa3c7efa9967d9c7b8fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Sat, 6 Jan 2024 00:29:35 +0300 Subject: [PATCH 57/62] 2.28.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d0140a49..eef5044a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "regexlearn", - "version": "2.27.0", + "version": "2.28.0", "author": { "name": "Aykut Kardaş", "email": "aykutkrds@gmail.com" From 0d76f31f3f51ebfbcc324167b4c16afbb5905d17 Mon Sep 17 00:00:00 2001 From: Oliver Cingl <77734781+oliverrr123@users.noreply.github.com> Date: Wed, 21 Feb 2024 16:30:30 +0100 Subject: [PATCH 58/62] Add Czech language (#336) * Added Czech language * Added Czech language to `html-lang-fixer.js` and `README.md` --- README.md | 1 + scripts/html-lang-fixer.js | 2 +- src/localization/cs-cz/cheatsheet.json | 70 ++++++++ src/localization/cs-cz/general.json | 39 +++++ src/localization/cs-cz/index.js | 17 ++ src/localization/cs-cz/landing.json | 26 +++ src/localization/cs-cz/learn.json | 164 ++++++++++++++++++ src/localization/cs-cz/lessons.json | 7 + .../cs-cz/lessons/regexForSeo.json | 49 ++++++ src/localization/index.ts | 1 + 10 files changed, 375 insertions(+), 1 deletion(-) create mode 100644 src/localization/cs-cz/cheatsheet.json create mode 100644 src/localization/cs-cz/general.json create mode 100644 src/localization/cs-cz/index.js create mode 100644 src/localization/cs-cz/landing.json create mode 100644 src/localization/cs-cz/learn.json create mode 100644 src/localization/cs-cz/lessons.json create mode 100644 src/localization/cs-cz/lessons/regexForSeo.json diff --git a/README.md b/README.md index 838d2616..9a54b5ff 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,7 @@ the way: - 🇦🇪 Arabic [(Requested)](https://github.com/aykutkardas/regexlearn.com/issues/163) - 🇧🇷 Brazilian Portuguese - 🇬🇪 Georgian [(Requested)](https://github.com/aykutkardas/regexlearn.com/issues/274) +- 🇨🇿 Czech Interested in adding your language? Please **[create an issue](https://github.com/aykutkardas/regexlearn.com/issues/new)** and let us know! diff --git a/scripts/html-lang-fixer.js b/scripts/html-lang-fixer.js index e62dbe29..89c17af0 100644 --- a/scripts/html-lang-fixer.js +++ b/scripts/html-lang-fixer.js @@ -15,7 +15,7 @@ function htmlLangFixer(path) { const stats = fs.lstatSync(currentPath); if (stats.isFile() && el.endsWith('.html')) { - const result = currentPath.match(/^\.\/out\/(en|es|de|tr|uk|fr|ru|pl|ko|zh-cn|pt-br)\/?/); + const result = currentPath.match(/^\.\/out\/(en|es|de|tr|uk|fr|ru|pl|ko|zh-cn|pt-br|cs-cz)\/?/); if (result) { replaceLangTag(currentPath, result[1]); diff --git a/src/localization/cs-cz/cheatsheet.json b/src/localization/cs-cz/cheatsheet.json new file mode 100644 index 00000000..913e4644 --- /dev/null +++ b/src/localization/cs-cz/cheatsheet.json @@ -0,0 +1,70 @@ +{ + "cheatsheet.section.title": "Regex tahák", + "cheatsheet.section.description": "Prozkoumejte všechny vzory a symboly regexu s tahákem pro regex.", + + "cheatsheet.anchors": "Začátky a konce", + "cheatsheet.caret.title": "Začátek řetězce nebo řádku", + "cheatsheet.caret.description": "Značí začátek řetězce nebo řádku.", + "cheatsheet.dollar.title": "Konec řetězce nebo řádku", + "cheatsheet.dollar.description": "Značí konec řetězce nebo řádku.", + "cheatsheet.wordBoundary.title": "Konec slova", + "cheatsheet.wordBoundary.description": "Shoduje se se znakem na konci slova.", + "cheatsheet.notWordBoundary.title": "Není na konci slova", + "cheatsheet.notWordBoundary.description": "Shoduje se se znakem, který není na konci slova.", + + "cheatsheet.characterClasses": "Znakové třídy", + "cheatsheet.characterSet.title": "Znaková sada", + "cheatsheet.characterSet.description": "Shoduje se s libovolným znakem ve sadě.", + "cheatsheet.negatedCharacterSet.title": "Negovaná znaková sada", + "cheatsheet.negatedCharacterSet.description": "Shoduje se s libovolným znakem, který není ve sadě.", + "cheatsheet.range.title": "Rozsah", + "cheatsheet.range.description": "Shoduje se se všemi znaky mezi dvěma znaky (podle abecedy), včetně jich samých.", + "cheatsheet.dot.title": "Tečka", + "cheatsheet.dot.description": "Shoduje se s libovolným znakem kromě koncem řádku.", + "cheatsheet.word.title": "Slovo", + "cheatsheet.word.description": "Shoduje se s libovolným alfanumerickým znakem. Včetně podtržítka.", + "cheatsheet.notWord.title": "Není slovo", + "cheatsheet.notWord.description": "Shoduje se s libovolným nealfanumerickým znakem.", + "cheatsheet.digit.title": "Číslice", + "cheatsheet.digit.description": "Shoduje se s libovolným numerickým znakem.", + "cheatsheet.notDigit.title": "Není číslice", + "cheatsheet.notDigit.description": "Shoduje se s libovolným nenumerickým znakem.", + "cheatsheet.space.title": "Mezera", + "cheatsheet.space.description": "Shoduje se s libovolným znakem 'bílého prostoru' (mezera, tabulátor, nový řádek, atd.).", + "cheatsheet.notSpace.title": "Není mezera", + "cheatsheet.notSpace.description": "Shoduje se s libovolným znakem, který není 'bílým prostorem' (mezera, tabulátor, nový řádek, atd.).", + + "cheatsheet.flags": "Vlajky", + "cheatsheet.caseInsensitiveFlag.title": "Ignorovat velikost písmen", + "cheatsheet.caseInsensitiveFlag.description": "Výraz nerozlišuje velikost písmen.", + "cheatsheet.globalFlag.title": "Globální", + "cheatsheet.globalFlag.description": "Zajišťuje, že se výraz nezastaví na prvním shodě.", + "cheatsheet.multilineFlag.title": "Víceřádkový", + "cheatsheet.multilineFlag.description": "Pokud není povoleno, začátek a konec řádku odpovídá začátku a konci celého řetězce. Nepracuje pro každý řádek individuálně.", + + "cheatsheet.groupAndReferences": "Skupina a Reference", + "cheatsheet.group.title": "Skupina", + "cheatsheet.group.description": "Seskupuje výraz.", + "cheatsheet.reference.title": "Reference", + "cheatsheet.reference.description": "Odkazuje na seskupený výraz.", + "cheatsheet.nonCapturingGroup.title": "Neodkazatelná skupina", + "cheatsheet.nonCapturingGroup.description": "Vytváří seskupený výraz, na který nelze odkazovat.", + + "cheatsheet.lookarounds": "Pohledy", + "cheatsheet.positiveLookahead.title": "Pohled dopředu", + "cheatsheet.negativeLookahead.title": "Znegovaný pohled dopředu", + "cheatsheet.positiveLookbehind.title": "Pohled dozadu", + "cheatsheet.negativeLookbehind.title": "Znegovaný pohled dozadu", + + "cheatsheet.quantifiersAndAlternation": "Kvantifikátory a Alternace", + "cheatsheet.plus.title": "Plus", + "cheatsheet.plus.description": "Výraz odpovídá jednomu a více.", + "cheatsheet.asterisk.title": "Asterisk", + "cheatsheet.asterisk.description": "Výraz odpovídá nule a více.", + "cheatsheet.quantifier.title": "Kvantifikátor", + "cheatsheet.quantifier.description": "Výraz odpovídá v určených rozsazích.", + "cheatsheet.optional.title": "Volitelný", + "cheatsheet.optional.description": "Činí výraz volitelným.", + "cheatsheet.alternation.title": "Alternace (nebo)", + "cheatsheet.alternation.description": "Shoduje se s jedním z vybraných výrazů." +} diff --git a/src/localization/cs-cz/general.json b/src/localization/cs-cz/general.json new file mode 100644 index 00000000..aa45e014 --- /dev/null +++ b/src/localization/cs-cz/general.json @@ -0,0 +1,39 @@ +{ + "general.prev": "Zpět", + "general.next": "Další", + "general.result": "Výsledek", + "general.regex": "Regex", + "general.text": "Text", + "general.watch": "Sledovat", + "general.start": "Start", + "general.continue": "Pokračovat", + "general.completedStep": "Krok dokončen!", + "general.hintQuestion": "Zobrazit odpověď", + "general.reportStep": "Nahlásit problém", + "general.startLearning": "Začít se učit", + "general.comingSoon": "Již brzy", + "general.becomeSponsor": "Stát se sponzorem", + "general.learn": "Učit", + "general.playground": "Playground", + "general.cheatsheet": "Tahák", + "general.ourSponsors": "Naši sponzoři", + "general.share": "Sdílet", + "general.shareLinkCopied": "Sdílejte zkopírovaný link!", + "general.somethingWentWrong": "Něco se pokazilo!", + + "notFound.intro": "Stránku, kterou hledáte neexistuje.", + "notFound.button": "Zpět na hlavní stránku", + + "page.landing.title": "Regex Learn - Krok po kroku, od nuly to sta.", + "page.learn.title": "Regex Learn - Interaktivní kurz regexu", + "page.cheatsheet.title": "Regex Learn - Regex tahák", + "page.playground.title": "Regex Learn - Playground", + "page.404.title": "Regex Learn - Stránka nenalezena", + + "page.landing.description": "Naučte se regex interaktivně, procvičujte na své úrovni, testujte a sdílejte svůj vlastní regex.", + "page.learn.description": "Naučte se regex krok po kroku. Dokončete interaktivní kurz, který vám učení usnadní a zrychlí.", + "page.cheatsheet.description": "Někdy si jen potřebujete vzpomenout na regex. Vyzkoušejte tahák, který vám usnadní porozumění a lepší zapamatování.", + "page.playground.description": "Vyzkoušejte si svůj regex na našem Playgroundu (hřišti). Sledujte, jak se váš regex chová v reálném čase.", + + "learn.safari.unsupportWarning": "Regex v tomto kroku není podporován některými prohlížeči. Pokud máte problém, klikněte zde." +} diff --git a/src/localization/cs-cz/index.js b/src/localization/cs-cz/index.js new file mode 100644 index 00000000..a30a668d --- /dev/null +++ b/src/localization/cs-cz/index.js @@ -0,0 +1,17 @@ +import cheatsheet from './cheatsheet.json'; +import general from './general.json'; +import landing from './landing.json'; +import learn from './learn.json'; +import lessons from './lessons.json'; +import regexForSeo from './lessons/regexForSeo.json'; + +const messages = { + ...cheatsheet, + ...general, + ...landing, + ...learn, + ...lessons, + ...regexForSeo, +}; + +export default messages; diff --git a/src/localization/cs-cz/landing.json b/src/localization/cs-cz/landing.json new file mode 100644 index 00000000..1b0ac70f --- /dev/null +++ b/src/localization/cs-cz/landing.json @@ -0,0 +1,26 @@ +{ + "landing.title": "Naučte se regex krok za krokem, od nuly do sta.", + "landing.description": "Naučit se regex je snazší, než si myslíte. Tento nástroj můžete použít k jednoduchému `učení`, `procvičování`, `testování` a `sdílení` regexu.", + "landing.imageAltText": "Ilustrace uvolněného muže s nohama na stole.", + + "section.learn.title": "Učit se", + "section.learn.content": "`Regulární výrazy`, zkráceně Regex nebo Regexp, jsou řetězce znaků vytvořené v rámci pravidel syntaxe regexu. S regexem, který používá příkazy jako hledání, shoda a úpravy, můžete snadno spravovat svá data. Regex lze používat v programovacích jazycích jako Python, SQL, JavaScript, R, Google Analytics, Google Data Studio a po celý průběh programování. Naučte se regex online s příklady a tutoriály na RegexLearn.", + "section.learn.imageAltText": "Ilustrace hory s vlajkou na jejím vrcholu.", + + "section.cheatsheet.button": "Procvičit regex", + "section.cheatsheet.title": "Tahák", + "section.cheatsheet.content": "S `RegexLearn Cheatsheet` (tahákem pro regex) můžete rychle vidět všechny použití, která potřebujete najednou, a zkontrolovat je přímo z jedné stránky. Prozkoumejte všechny vzory a symboly regexu s tahákem regexu.", + "section.cheatsheet.imageAltText": "Ilustrace muže, který prohlíží stránky dalekohledem.", + + "section.playground.title": "Playground (hřiště)", + "section.playground.content": "Pokud chcete vytvořit regex, můžete ho snadno vytvářet a testovat prostřednictvím Playgroundu. Jako tester regexu můžete ověřovat a sdílet svůj regex s ostatními.", + "section.playground.imageAltText": "Ilustrace kočky, která shazuje plnou sklenici.", + + "section.practice.title": "Procvičování", + "section.practice.content": "Pokud dokončíte kurzy, je čas na PROCVIČOVÁNÍ! V části procvičování můžete otestovat své znalosti regexu a procvičovat s tutoriály podle své úrovně. Již brzy.", + "section.practice.imageAltText": "Ilustrace ženy, která dělá poznámky z knihy.", + + "section.opensource.title": "Open Source", + "section.opensource.content": "Regex Learn je open-source projekt, který vítá příspěvky komunity a je zdarma k použití. Práce na tomto projektu vám umožní zdokonalit své dovednosti, studovat a spolupracovat. Můžete přispívat a podporovat zde.", + "section.opensource.imageAltText": "Ilustrace ženy, muže a kočky skládajících skládačky." +} diff --git a/src/localization/cs-cz/learn.json b/src/localization/cs-cz/learn.json new file mode 100644 index 00000000..276e6f0a --- /dev/null +++ b/src/localization/cs-cz/learn.json @@ -0,0 +1,164 @@ +{ + "examples.starter.title": "Procvičování", + "examples.starter.description": "Nyní je čas procvičovat k upevnění toho, co jste se naučili.", + + "examples.finish.title": "Procvičování dokončeno!", + "examples.finish.description": " ", + + "steps.starter.title": "Úvod", + "steps.starter.description": "Regex (regular expressions) zkráceně znamená `regulární výrazy`. Pomáhá nám najít, nebo spravovat text. Napište `OK` do pole regex, abyste přešli na první krok a získali podrobnější popis..", + + "steps.whatIsRegex.title": "Co jsou regulární výrazy `Regex`?", + "steps.whatIsRegex.description": "Regulární výrazy jsou řetězce znaků, které vyjadřují hledací vzor. Často zkráceně jako `Regex` nebo `Regexp`. Používá se zejména k hledání nebo nahrazování slov v textech. Navíc můžeme testovat, zda text splňuje pravidla, která jsme nastavili.\\n\\n Například, představte si, že máte seznam názvů souborů a chcete najít pouze soubory s příponou `pdf`. Psaním výrazu `^\\w+\\.pdf$` toho dosáhnete. S postupem kroků tento výraz pochopíte.", + + "steps.basicMatchers.title": "Základní shodovač", + "steps.basicMatchers.description": "Znak nebo slovo, které chceme najít, je napsáno přímo. Podobá se běžnému procesu hledání. Například k nalezení slova `curious` v textu napište totéž.", + + "steps.dotCharacter.title": "Tečka `.`: libovolný znak", + "steps.dotCharacter.description": "Tečka `.` umožňuje vybrat libovolný znak, včetně speciálních znaků a mezer. Napište tečku `.` do pole a postupujte dál.", + + "steps.characterSet.title": "Znakové sady `[abc]`", + "steps.characterSet.description": "Pokud může jeden ze znaků ve slově být různými znaky, zapíšeme jej do hranatých závorek `[]` se všemi alternativními znaky. Například k napsání výrazu, který najde všechna slova v textu, napište znaky `a`, `e`, `i`, `o`, `u` vedle sebe do hranatých závorek `[]`.", + + "steps.negatedCharacterSet.title": "Negované znakové sady `[^abc]`", + "steps.negatedCharacterSet.description": "Pro nalezení všech slov v textu níže, kromě `ber` a `bor`, napište `e` a `o` za znakem `^` uvnitř hranatých závorek `[]`.", + + "steps.range.title": "Rozsah písmen `[a-z]`", + "steps.range.description": "K nalezení písmen v určeném rozsahu podle abecedy se začínající písmeno a koncové písmeno zapíší do hranatých závorek `[]` s pomlčkou mezi nimi `-`. Je citlivý na velikost písmen. Napište výraz, který vybere všechna malá písmena mezi `e` a `o`, včetně jich samotných.", + + "steps.rangeNumber.title": "Rozsah čísel `[0-9]`", + "steps.rangeNumber.description": "K nalezení čísel v určeném rozsahu se začínající číslo a koncové číslo zapíší do hranatých závorek `[]` s pomlčkou `-` mezi nimi. Napište výraz, který vybere všechna čísla mezi `3` a `6`, včetně jich samotných.", + + "examples.basicMatchers.title": "Procvičování: základní shodovač", + "examples.basicMatchers.description": "Napište výraz, který vybere slova `of` v textu.", + + "examples.dotCharacter.title": "Procvičování: libovolný znak", + "examples.dotCharacter.description": "Napište výraz, který vybere jednotlivé písmena, čísla, mezery a speciální znaky v textu. Výraz, který napíšete, musí vyhovovat libovolnému znaku.", + + "examples.characterSet.title": "Procvičování: znakové sady", + "examples.characterSet.description": "Napište frázi, která se shoduje s každým slovem v textu. Jediné znaky, které se mění, jsou počáteční písmena slov.", + + "examples.negatedCharacterSet.title": "Procvičování: negované znakové sady", + "examples.negatedCharacterSet.description": "Napište výraz, který se shoduje s čímkoli kromě slov `beor` a `beur` v textu. Učiňte tak pomocí negované znakové sady.", + + "examples.range.title": "Procvičování: rozsah písmen", + "examples.range.description": "Napište výraz, který vybere písmena od `g` do `k` v textu.\\nPísmena `g` a `k` by měla být také zahrnuta v tomto rozsahu.", + + "examples.rangeNumber.title": "Procvičování: rozsah čísel", + "examples.rangeNumber.description": "Napište výraz, který vybere čísla od `2` do `7` v textu.\\n`2` a `7` by měly být také zahrnuty v tomto rozsahu.", + + "steps.repetitions.title": "Opakování", + "steps.repetitions.description": "Některé speciální znaky slouží k určení toho, kolikrát se znak v textu bude opakovat. Tyto speciální znaky jsou plus `+`, hvězdička `*` a otazník `?`.", + + "steps.asterisk.title": "Hvězdička `*`", + "steps.asterisk.description": "Přidáme hvězdičku `*` za znak, abychom naznačili, že se znak buď vůbec nemusí opakovat vůbec (není v textu), nebo se může opakovat mnohokrát. Naznačte, že písmeno `e` by se v textu nemělo vůbec vyskytovat, nebo se může vyskytovat jednou i vícekrát za sebou.", + + "steps.plusCharacter.title": "Znaménko plus `+`", + "steps.plusCharacter.description": "Abychom naznačili, že se znak může vyskytovat jednou nebo vícekrát, přidáme za znak znaménko plus `+`. Naznačte, že písmeno `e` se může v textu vyskytovat jednou nebo vícekrát.", + + "steps.questionMark.title": "Otazník `?`", + "steps.questionMark.description": "Abychom naznačili, že je znak volitelný, přidáme k němu otazník `?`. Naznačte, že následující písmeno `u` je volitelné.", + + "steps.quantifier.title": "Kudrlinky - 1", + "steps.quantifier.description": "K vyjádření určitého počtu výskytů znaku napíšeme na konci kudrlinky `{n}` spolu s tím, kolikrát chceme, aby se vyskytoval. Například naznačte, že následující písmeno `e` se může vyskytovat pouze `2` krát.", + + "steps.quantifierMin.title": "Kudrlinky - 2", + "steps.quantifierMin.description": "Pro vyjádření alespoň určitého počtu výskytů znaku napíšeme ihned po znaku, kolikrát bychom si přáli, aby se vyskytoval, následované čárkou `,` a zabaleno do kudrlinek `{n, }`. Například naznačte, že následující písmeno `e` se musí vyskytovat alespoň `3` krát.", + + "steps.quantifierRange.title": "Kudrlinky - 3", + "steps.quantifierRange.description": "Pro vyjádření výskytu znaku v určitém rozsahu napíšeme kudrlinky `{x,y}` s rozsahem od `x` do `y`. Například naznačte, že následující písmeno `e` se může vyskytovat pouze `1` až `3` krát.", + + "examples.asterisk.title": "Procvičování: hvězdička `*`", + "examples.asterisk.description": "Použijte hvězdičku `*` k napsání výrazu, který vybere každé slovo, kde se `e` vyskytuje nula a vícekrát.", + + "examples.plusCharacter.title": "Procvičování: znaménko plus `+`", + "examples.plusCharacter.description": "Napište výraz s použitím znaménka plus `+`, který vybere slova, ve kterých se písmeno `e` vyskytuje jednou nebo vícekrát.", + + "examples.questionMark.title": "Procvičování: otazník `?`", + "examples.questionMark.description": "Napište výraz, který naznačuje, že písmeno `n` je volitelné, pomocí otazníku `?`. Takto mohou být vybrána jak slova `a`, tak `an`.", + + "examples.quantifier.title": "Procvičování: kudrlinky - 1", + "examples.quantifier.description": "Napište výraz s kudrlinkami `{}`, který najde texty obsahující `4` čísla za sebou. Pamatujte, že rozsah `[0-9]` odpovídá jednomu číslu.", + + "examples.quantifierMin.title": "Procvičování: kudrlinky - 2", + "examples.quantifierMin.description": "Napište výraz s kudrlinkami `{}`, který najde texty obsahující alespoň `2` čísla za sebou.", + + "examples.quantifierRange.title": "Procvičování: kudrlinky - 3", + "examples.quantifierRange.description": "Napište výraz s kudrlinkami `{}`, který najde texty obsahující alespoň `1` a nejvýše `4` čísla za sebou.", + + "steps.grouping.title": "Závorky `( )`: seskupování", + "steps.grouping.description": "Můžeme seskupit výraz a tyto skupiny použít k odkazování nebo vynucování některých pravidel. K seskupení výrazu uzavřeme `()` do závorek. Zatím jen seskupte `haa` níže.", + + "steps.groupReference.title": "Odkazování na skupinu", + "steps.groupReference.description": "Slova `ha` a `haa` jsou níže seskupena. První skupina se používá tím, že napíšeme `\\1`, abychom se vyhnuli opisování. Zde `1` označuje pořadí seskupení. Napište na konec výrazu `\\2`, abyste se odkázali na druhou skupinu.", + + "steps.nonCapturingGrouping.title": "Závorky `(?: )`: seskupení bez odkazování", + "steps.nonCapturingGrouping.description": "Můžeme seskupit výraz a zajistit, že není odkazatelný. Například níže jsou dvě skupiny. Skupina, na kterou nyní odkážeme pomocí `\\1` je ve skutečnosti druhá skupina, protože první skupina je neodkazatelná.", + + "steps.pipeCharacter.title": "Znak `|` (nebo)", + "steps.pipeCharacter.description": "Umožňuje specifikovat, že výraz může být v různých výrazech. Všechny možné výroky jsou napsány odděleně pomocí znaku svislé čáry `|`. Na rozdíl od znakových sad `[abc]` tak, které pracují na úrovni znaků, svislé čáry pracují na úrovni výrazů. Například následující výraz by vybral jak `cat`, tak `rat`. Přidejte další znak svislé čáry `|` na konec výrazu a napište `dog`, aby byla vybrána všechna slova.", + + "steps.escapeCharacter.title": "Zpětné lomítko `\\`", + "steps.escapeCharacter.description": "Existují speciální znaky, které používáme při psaní regexu. `{ } [ ] / \\ + * . $^ | ?` Abychom vybrali tyto znaky samotné, musíme použít zpětné lomítko `\\`. Například k výběru tečky `.` a hvězdičky `*` před ně přidejte zpětné lomítko `\\`.", + + "steps.caret.title": "Znak stříšky `^`:\\nvýběr podle začátku řádku", + "steps.caret.description": "Používali jsme `[0-9]` k nalezení čísel. Abychom našli pouze čísla na začátku řádku, před tímto výrazem přidejte znak stříšky `^`.", + + "steps.dollar.title": "Znak dolaru `$`:\\nvýběr podle konce řádku", + "steps.dollar.description": "Použijte znak dolaru `$` za hodnotou `html` k vybrání textů `html` pouze na konci řádku.", + + "steps.wordCharacter.title": "Znak slova `\\w`: písmena, čísla a podtržítka", + "steps.wordCharacter.description": "Výraz `\\w` slouží k nalezení písmen, čísel a podtržítek. Použijte výraz `\\w` k nalezení znaků slov v textu.", + + "steps.withoutWordCharacter.title": "Znegovaný znak slova `\\W`", + "steps.withoutWordCharacter.description": "Výraz `\\W` slouží k nalezení znaků jiných než písmena, čísla a podtržítka.", + + "steps.numberCharacter.title": "Znak čísla `\\d`", + "steps.numberCharacter.description": "`\\d` slouží k nalezení pouze číselných znaků.", + + "steps.withoutNumberCharacter.title": "Znegovaný znak čísla `\\D`", + "steps.withoutNumberCharacter.description": "`\\D` slouží k nalezení nečíselných znaků.", + + "steps.spaceCharacter.title": "Znak mezery `\\s`", + "steps.spaceCharacter.description": "`\\s` slouží k nalezení pouze znaků mezery.", + + "steps.withoutSpaceCharacter.title": "Znegovaný znak mezery `\\S`", + "steps.withoutSpaceCharacter.description": "`\\S` slouží k nalezení znaků jiných než mezera.", + + "steps.lookarounds.title": "Pohledy dopředu a dozadu", + "steps.lookarounds.description": "Pokud chceme, aby fráze, kterou píšeme, přišla před nebo po jiné frázi, musíme provádět \"pohledy dopředu a dozadu\". Přejděte na další krok a naučte se, jak provádět.", + + "steps.positiveLookahead.title": "Pohled dopředu: `(?=)`", + "steps.positiveLookahead.description": "Například, chceme vybrat hodinovou hodnotu v textu. Chceme tedy vybrat pouze číselné hodnoty, které následují za `PM`. Pro tento účel musíme napsat výraz pohledu dopředu `(?=)` po našem výrazu. Vložte `PM` za znaménko `=` uvnitř závorek.", + + "steps.negativeLookahead.title": "Znegovaný pohled dopředu: `(?!)`", + "steps.negativeLookahead.description": "Například, chceme vybrat čísla jiná než hodinová hodnota v textu. Musíme proto napsat výraz záporného pohledu dopředu `(?!)` po našem výrazu, abychom vybrali pouze číselné hodnoty, které nemají za sebou `PM`. Vložte `PM` za znaménko `!` uvnitř závorek.", + + "steps.positiveLookbehind.title": "Pohled dozadu: `(?<=)`", + "steps.positiveLookbehind.description": "Například, chceme vybrat hodnotu ceny v textu. Abychom vybrali pouze číselné hodnoty, které jsou předcházeny znakem `$`, musíme napsat regulární výraz kladného pohledu dozadu `(?<=)` před naším výrazem. Přidejte `\\$` za znaménko `=` uvnitř závorek.", + + "steps.negativeLookbehind.title": "Znegovaný pohled dozadu: `(?<!)`", + "steps.negativeLookbehind.description": "Například, chceme vybrat čísla v textu, která nejsou hodnotou ceny. Proto musíme napsat regulární výraz záporného pohledu dozadu `(?<!)` před naším výrazem, abychom vybrali pouze číselné hodnoty, které nejsou předcházeny znakem `$`. Přidejte `\\$` za znaménko `!` uvnitř závorek.", + + "steps.flags.title": "Vlajky", + "steps.flags.description": "Vlajky mění výstup výrazu. Proto se jim také říká `modifikátory`. Vlajky určují, zda se má text považovat za oddělené řádky, zda má rozlišovat velikost písmen nebo zda má najít všechna shoda. Pokračujte na další krok a dozvíte se více o vlajkách.", + + "steps.flagsGlobal.title": "Globální vlajka", + "steps.flagsGlobal.description": "Vlajka `global` způsobí, že výraz vybere všechny shody. Pokud není použita, vybere pouze první shodu. Nyní aktivujte globální vlajku, abyste mohli vybírat všechny shody.", + + "steps.flagsMultiline.title": "Víceřádková vlajka", + "steps.flagsMultiline.description": "Regex vidí veškerý text jako jeden řádek. Ale používáme vlajku `multiline`, abychom každý řádek zpracovávali samostatně. Tímto způsobem se výrazy, které píšeme k identifikaci na konců řádků, zpracují samostatně pro každý řádek. Nyní povolte víceřádkovou vlajku, abyste mohli najít všechny shody.", + + "steps.flagsCaseInsensitive.title": "Vlakja pro odstranění citlivosti na velikost písmen", + "steps.flagsCaseInsensitive.description": "Abychom odstranili citlivost na velikost písmen v napsaném výrazu, musíme aktivovat vlajku `case-insensitive`.", + + "steps.greedyMatching.title": "Lakomé shody", + "steps.greedyMatching.description": "Regex automaticky provádí lakomou shodu. To znamená, že shoda bude co nejdelší. Podívejte se na příklad níže. Odkazuje na jakoukoli shodu končící písmenem `r` a může být libovolným znakem před ním. Ale neskončí u prvního písmena `r`.", + + "steps.lazyMatching.title": "Líné shody", + "steps.lazyMatching.description": "Líná shoda, na rozdíl od lakomé shody, se zastaví u první shody. Například v následujícím příkladu přidejte `?` za `*`, abyste našli první shodu končící písmenem `r` a před ním libovolným znakem. To znamená, že tato shoda se zastaví u prvního písmene `r`.", + + "steps.completeAllSteps.title": "Gratulujeme, dokončili jste všechny kroky!", + "steps.completeAllSteps.description": "Můžete se kdykoli vrátit zpět ke předchozím krokům a snadno procházet všemi kroky, kterými jste prošli." +} + diff --git a/src/localization/cs-cz/lessons.json b/src/localization/cs-cz/lessons.json new file mode 100644 index 00000000..b88bb406 --- /dev/null +++ b/src/localization/cs-cz/lessons.json @@ -0,0 +1,7 @@ +{ + "lessons.regex101.title": "Regex 101 - CZ", + "lessons.regex101.description": "V tomto tutoriálu se naučíte základy regexu.", + + "lessons.regexForSeo.title": "Regex for SEO - CZ", + "lessons.regexForSeo.description": "V tomto tutoriálu se naučíte kde a jak můžete použít regex pro SEO." +} diff --git a/src/localization/cs-cz/lessons/regexForSeo.json b/src/localization/cs-cz/lessons/regexForSeo.json new file mode 100644 index 00000000..d8542c1b --- /dev/null +++ b/src/localization/cs-cz/lessons/regexForSeo.json @@ -0,0 +1,49 @@ +{ + "lesson.regexForSeo.starter.title": "Regex pro SEO", + "lesson.regexForSeo.starter.description": "Regex je sada pravidelných výrazů často používaných v mnoha oblastech, zejména lidmi, kteří chtějí zvýšit svou produktivitu. Výhody používání regexu pro SEO spočívají v tom, že usnadňuje analýzu velkých dat a umožňuje psát bohatší filtry. Doporučujeme začít s tutoriálem `Regex 101`, pokud jste začátečníci. \\n\\nZačněte tím, že napíšete `OK` do pole regexu a přejděte na první krok, kde získáte podrobnější vysvětlení.", + + "lesson.regexForSeo.usage.title": "Příklady použití", + "lesson.regexForSeo.usage.description": "Regex pro SEO můžete použít na platformách jako `Google Analytics`, `Google Data Studio`, `Google Sheets`, `Google Search Console`, `Ahrefs`, `Deepcrawl`, `Screaming Frog`. Často se také používá v souborech `.htaccess` a `robots.txt (syntaxe podobné regexu)`.\\n\\nNíže je příklad regexu, který vybere pouze texty v seznamu začínající slovem `Google`.", + + "lesson.regexForSeo.basics.title": "Základy", + "lesson.regexForSeo.basics.description": "Podívejme se na pár regexů, které budete často používat. Doporučujeme si přečíst tutoriál `Regex 101`, abyste se dozvěděli více o těchto základech. Napište `Yes`, abyste začali.", + + "lesson.regexForSeo.or.title": "Operátor `|` (Nebo)", + "lesson.regexForSeo.or.description": "Operátor `|` (nebo) používáme, abychom filtrovali více výrazů. Například pro filtrování textu obsahujícího `seo` a `regex` napište obě slova oddělená operátorem `|` (nebo).", + + "lesson.regexForSeo.optional.title": "Volitelný operátor `?`", + "lesson.regexForSeo.optional.description": "Používáme ho k vyjádření toho, že výraz nebo znak je volitelný. Například chceme filtrovat text obsahující jak `http`, tak `https`. Můžeme k tomu použít operátor `|` (nebo), ale existuje i lepší způsob pro tyto dva téměř identické výrazy.\\n\\nV tomto příkladu je písmeno `s` volitelné. Přidejte na konec písmene `s` otazník `?`.", + + "lesson.regexForSeo.any.title": "Vše `.*`", + "lesson.regexForSeo.any.description": "V regexu může tečka `.` odpovídat čemukoli, včetně mezer. Ale tento zápis platí pouze pro jedno písmeno. Znak hvězdičky `*` znamená, že předcházející položka v textu buď vůbec neexistuje, nebo se vyskytuje více než jednou. Když jsou tyto dva znaky použity společně, znamená to, že může být prvek libovolné délky.\\n\\nNíže jsou různá klíčová slova. Přidejte `.*` na konec regexu, abyste vybrali výraz začínající slovy `how to write` a vše za ním.", + + "lesson.regexForSeo.contains.title": "Obsahuje", + "lesson.regexForSeo.contains.description": "Abyste filtrovali text obsahující slova nebo fráze, které hledáme, napište slovo, které hledáme, mezi dvě fráze `.*`, které mohou být cokoli. Například napište `.*buy.*`, abyste filtrovali text obsahující slovo `buy`.", + + "lesson.regexForSeo.negated.title": "Negované znakové sady `[^abc]`", + "lesson.regexForSeo.negated.description": "Používáme negované znakové sady `[^]` k označení znaků, které nechceme zahrnovat. Znaky, které nechceme zahrnovat, jsou napsány v hranatých závorkách se stříškou `^` na začátku. Níže jsou označeny `http` i `https`. Protože `http` se vyskytuje v obou, tudíž vybere také `https`. Napište `[^s]` za písmeno `p`, abyste vyloučili písmeno `s`.", + + "lesson.regexForSeo.caret.title": "Znak stříšky `^`", + "lesson.regexForSeo.caret.description": "Předpokládejme, že máme seznam URL adres a chceme najít pouze ty, které začínají slovem `http`. Ale adresy obsahují `http` také v jiných částech, než na začátku. Přidejte stříšku `^` na začátek následujícího výrazu, abyste filtrovali pouze ty, které začínají slovem `http`.", + + "lesson.regexForSeo.dollarAndEscape.title": "Znak dolaru `$` a zpětné lomítko `\\`", + "lesson.regexForSeo.dollarAndEscape.description": "Opět máme seznam URL adres. Chceme najít pouze ty, které končí `.htm`.\\n\\nProtože tečka `.` je speciální znak, který označí vše, nejprve musíme 'zakázat' speciální tečku před `htm` pomocí zpětného lomítka `\\`. Toto platí pro všechny speciální znaky.\\n\\nPoté přidejte znak dolaru `$` na konec výrazu. Tím se zajistí, že text, který se má filtrovat, končí výrazem napsaným před ním.", + + "lesson.regexForSeo.limitation.title": "Omezení délky `{n}`", + "lesson.regexForSeo.limitation.description": "Můžeme chtít filtrovat výsledky podle délky znaků. Například k filtrování URL adres o délce `35` znaků napište číslo, které chcete použít pro délku, `{35}`, do složených závorek za tečku `.`.", + + "lesson.regexForSeo.maxLimitation.title": "Omezení délky (Maximální) `{n,m}`", + "lesson.regexForSeo.maxLimitation.description": "K filtrování URL adres s maximální délkou `35` znaků napište `{1,35}`, minimální a maximální číselné hodnoty, které chcete použít pro délku, do složených závorek za tečku `.`.", + + "lesson.regexForSeo.minLimitation.title": "Omezení délky (Minimální) `{n,}`", + "lesson.regexForSeo.minLimitation.description": "K filtrování URL adres s minimální délkou `35` znaků napište `{35,}`, za tečku napište složené závorky končící čárkou pro minimální číselnou hodnotu, kterou chcete použít pro délku.", + + "lesson.regexForSeo.robots.title": "robots.txt (syntaxe podobná regexu)", + "lesson.regexForSeo.robots.description": "Zde je příklad použití syntaxe podobné regexu v souboru `robots.txt`. Příklad uvádí, že roboti by neměli procházet odkazy s příponou `pdf`.", + + "lesson.regexForSeo.htaccess.title": ".htaccess", + "lesson.regexForSeo.htaccess.description": "Zde je příklad použití regexu v souboru `.htaccess`. V příkladu jsou odkazy s příponou `php` přesměrovány na odkazy s příponou `html` s kódem `301`.", + + "lesson.regexForSeo.outro.title": "Závěr", + "lesson.regexForSeo.outro.description": "Znalost regexu je dovednost, která zvyšuje produktivitu na jakékoli platformě umožňující používání regexu. Jakmile začnete používat tuto dovednost a zdokonalíte ji, pomůže vám rychle dokončovat mnoho opakujících se úkolů a ušetřit čas na jiné věci. Pro lepší porozumění základům regexu můžete zkusit tutoriál `Regex 101`. Na stránce `Playground` můžete testovat své regex výrazy na svých textech." +} diff --git a/src/localization/index.ts b/src/localization/index.ts index d11ba5c3..310651aa 100644 --- a/src/localization/index.ts +++ b/src/localization/index.ts @@ -10,6 +10,7 @@ export const langNames = { ko: '🇰🇷', pl: '🇵🇱', 'pt-br': '🇧🇷', + 'cs-cz': '🇨🇿', }; export const defaultLocale = 'en'; From 95c9d3a7c2f1be63f60df798e8b98b895f7a270c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Wed, 21 Feb 2024 18:34:03 +0300 Subject: [PATCH 59/62] fix: french translation --- src/localization/fr/learn.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/localization/fr/learn.json b/src/localization/fr/learn.json index 47e1302a..d21ab6e2 100644 --- a/src/localization/fr/learn.json +++ b/src/localization/fr/learn.json @@ -120,10 +120,10 @@ "steps.withoutNumberCharacter.description": "`\\D` est utilisé pour trouver uniquement les caractères numériques.", "steps.spaceCharacter.title": "Caractère d'espace `\\s`", - "steps.spaceCharacter.description": "`\\s` is used to find only space characters.", + "steps.spaceCharacter.description": "`\\S` est utilisé pour trouver uniquement les caractères d'espace.", "steps.withoutSpaceCharacter.title": "Sauf le caractère espace `\\S`", - "steps.withoutSpaceCharacter.description": "`\\S` est utilisé pour trouver uniquement les caractères d'espace.", + "steps.withoutSpaceCharacter.description": "`\\S` est utilisé pour trouver des caractères qui ne sont pas d'espaces.", "steps.lookarounds.title": "Regard autour", "steps.lookarounds.description": "Si nous voulons que la phrase que nous écrivons soit placée avant ou après une autre phrase, nous devons utiliser la fonction \"contourner\". Passez à l'étape suivante pour apprendre à \"contourner\".", From 580d1b3be9388b15802ddbfe0e478ed46310482b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Wed, 21 Feb 2024 18:34:19 +0300 Subject: [PATCH 60/62] 2.29.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index eef5044a..8b63edf1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "regexlearn", - "version": "2.28.0", + "version": "2.29.0", "author": { "name": "Aykut Kardaş", "email": "aykutkrds@gmail.com" From 220da518939b50b6bca2d4406c942eafb6da272d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aykut=20Karda=C5=9F?= Date: Wed, 21 Feb 2024 18:54:30 +0300 Subject: [PATCH 61/62] docs: update readme --- README.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9a54b5ff..075bc2ee 100644 --- a/README.md +++ b/README.md @@ -38,11 +38,19 @@ the way: - 🇫🇷 French - 🇵🇱 Polish - 🇰🇷 Korean -- 🇦🇪 Arabic [(Requested)](https://github.com/aykutkardas/regexlearn.com/issues/163) - 🇧🇷 Brazilian Portuguese -- 🇬🇪 Georgian [(Requested)](https://github.com/aykutkardas/regexlearn.com/issues/274) - 🇨🇿 Czech +### Requested Translations + +- 🇦🇪 Arabic [(Issue)](https://github.com/aykutkardas/regexlearn.com/issues/163) +- 🇬🇪 Georgian [(Issue)](https://github.com/aykutkardas/regexlearn.com/issues/274) +- 🇧🇩 Bengali [(Issue)](https://github.com/aykutkardas/regexlearn.com/issues/304) +- 🇮🇹 Italian [(Issue)](https://github.com/aykutkardas/regexlearn.com/issues/323) +- 🇮🇷 Persian [(Issue)](https://github.com/aykutkardas/regexlearn.com/issues/325) +- 🇻🇳 Vietnamese [(Issue)](https://github.com/aykutkardas/regexlearn.com/issues/329) +- 🇮🇩 Indonesian [(Issue)](https://github.com/aykutkardas/regexlearn.com/issues/335) + Interested in adding your language? Please **[create an issue](https://github.com/aykutkardas/regexlearn.com/issues/new)** and let us know! From 04cb4a19a6f946b765a1c0d921ef1023bdb4b746 Mon Sep 17 00:00:00 2001 From: esma <104065755+ethsmaa@users.noreply.github.com> Date: Tue, 19 Mar 2024 14:59:16 +0300 Subject: [PATCH 62/62] feature: rtl language support (#344) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feature: rtl language support * fix: color red * fix: rtl issues * fix: todo line * fix: empty line --------- Co-authored-by: Aykut Kardaş --- src/components/CheatsheetDemo.tsx | 2 +- src/components/FlagSelect.tsx | 2 +- src/components/Header.tsx | 2 +- src/components/InteractiveArea.tsx | 2 +- src/components/LanguageSelect.tsx | 4 +++- src/components/LearnFooter.tsx | 16 +++++++++---- src/components/LessonBox.tsx | 20 ++++++++++------ src/components/PlaygroundEditor.tsx | 2 +- src/components/Progress.tsx | 37 ++++++++++++++++++----------- src/components/ReportPlayground.tsx | 2 +- src/components/Step.tsx | 2 +- src/localization/index.ts | 2 ++ src/pages/[lang]/learn/index.tsx | 4 ++-- src/pages/_app.tsx | 12 ++++++---- src/utils/useLanguageDirection.tsx | 10 ++++++++ 15 files changed, 79 insertions(+), 40 deletions(-) create mode 100644 src/utils/useLanguageDirection.tsx diff --git a/src/components/CheatsheetDemo.tsx b/src/components/CheatsheetDemo.tsx index 3e08e4ce..fd648996 100644 --- a/src/components/CheatsheetDemo.tsx +++ b/src/components/CheatsheetDemo.tsx @@ -40,7 +40,7 @@ const CheatsheetDemo = ({ data }: Props) => { const readableContent = (content || initialContent).replace(/\\n/gm, '
'); return ( -
+
{ - + {flagList.map(({ name, code, command, regex }) => (
{
{isPlaygroundPage && ( - + v{packageInfo.version} )} diff --git a/src/components/InteractiveArea.tsx b/src/components/InteractiveArea.tsx index 67dd1df2..b609e2cf 100644 --- a/src/components/InteractiveArea.tsx +++ b/src/components/InteractiveArea.tsx @@ -197,7 +197,7 @@ const InteractiveArea = ({ isShow, setIsOpenModal }: Props) => { }).toLowerCase(); return ( -
({ const LanguageSelect = () => { const { pathname, query } = useRouter(); + + let currentLang = langNames[query.lang as string]; const availableLangList = langList.filter(({ value }) => query.lang !== value); @@ -21,7 +23,7 @@ const LanguageSelect = () => { {currentLang} - + {availableLangList.map(({ label, value }) => ( { const { lessonData, step, nextStep, prevStep, success, error } = useContext(InteractiveAreaContext); + const direction = useLanguageDirection(); + + const nextIconName = direction === 'rtl' ? 'arrow-left' : 'arrow-right'; + const prevIconName = direction === 'rtl' ? 'arrow-right' : 'arrow-left'; + return (
{step > 0 && (
- +
@@ -34,10 +40,10 @@ const LearnFooter = () => {
-
+
{step < lessonData.length - 1 && (
{
- +
)} diff --git a/src/components/LessonBox.tsx b/src/components/LessonBox.tsx index bf1b55a2..af9da29c 100644 --- a/src/components/LessonBox.tsx +++ b/src/components/LessonBox.tsx @@ -5,6 +5,7 @@ import cx from 'clsx'; import IntlLink from 'src/components/IntlLink'; import Icon from 'src/components/Icon'; +import { useLanguageDirection } from 'src/utils/useLanguageDirection'; interface Props { data: { @@ -46,6 +47,9 @@ const LessonBox = ({ data, lock, bgColor }: Props) => { const startText = formatMessage({ id: isVisit ? 'general.continue' : 'general.start' }); + const direction = useLanguageDirection(); + const arrowDirectionName = direction === 'rtl' ? 'arrow-left' : 'arrow-right'; + return (
{

{!lock && (
-
+
{data.videoCount && ( - - + + {data.videoCount} )} - + {data.stepCount}
- - {startText} - + + {startText} + + +
)}
diff --git a/src/components/PlaygroundEditor.tsx b/src/components/PlaygroundEditor.tsx index 72b841b1..02032949 100644 --- a/src/components/PlaygroundEditor.tsx +++ b/src/components/PlaygroundEditor.tsx @@ -204,7 +204,7 @@ const Playground = () => { return ( <> -
Math.round((current / total) * 100); interface Props { @@ -6,20 +8,27 @@ interface Props { showProgressText?: boolean; } -const Progress = ({ current, total, showProgressText = true }: Props) => ( -
-
-
-
- {showProgressText && ( -
- {`${current} / ${total}`} +const Progress = ({ current, total, showProgressText = true }: Props) => { + + const direction = useLanguageDirection(); + const progressText = direction === "rtl" ? `${total} / ${current}` : `${current} / ${total}`; + + + return ( +
+
+
- )} -
-); + {showProgressText && ( +
+ {progressText} +
+ )} +
+ ); +}; export default Progress; diff --git a/src/components/ReportPlayground.tsx b/src/components/ReportPlayground.tsx index bb369fa4..ffc91860 100644 --- a/src/components/ReportPlayground.tsx +++ b/src/components/ReportPlayground.tsx @@ -39,7 +39,7 @@ const ReportPlayground = () => { target="_blank" rel="noreferrer" > - + ); diff --git a/src/components/Step.tsx b/src/components/Step.tsx index c9be5590..29a39f30 100644 --- a/src/components/Step.tsx +++ b/src/components/Step.tsx @@ -79,7 +79,7 @@ const Step = () => { rel="noreferrer" > {lesson.sponsor || lesson.creator ? ( - + {lesson.sponsor ? 'Sponsored' : 'Created'} by{' '} { attrs={{ className: 'text-regreen-400' }} />
-
+
{lessons.map(lesson => (
{ rel="noreferrer" > {lesson.sponsor || lesson.creator ? ( - + {lesson.sponsor ? 'Sponsored' : 'Created'} by{' '} { + useEffect(() => { const preventBrowserShortcut = e => { if (e.ctrlKey && 'gmi'.includes(e.key.toLowerCase())) { @@ -28,6 +30,9 @@ const MyApp = ({ Component, pageProps }: AppProps) => { const { asPath } = useRouter(); const href = asPath.replace('/en', '/').replace('//', '/'); + + const direction = useLanguageDirection() + return ( { key={locale} rel="alternate" hrefLang={locale} - href={`${process.env.NEXT_PUBLIC_BASE_URL}${locale === 'en' ? '' : locale + '/'}${ - metadata.hrefLang - }`} + href={`${process.env.NEXT_PUBLIC_BASE_URL}${locale === 'en' ? '' : locale + '/'}${metadata.hrefLang + }`} /> ))} {/* */} @@ -65,7 +69,7 @@ const MyApp = ({ Component, pageProps }: AppProps) => { )} -
+
diff --git a/src/utils/useLanguageDirection.tsx b/src/utils/useLanguageDirection.tsx new file mode 100644 index 00000000..ae95b6ab --- /dev/null +++ b/src/utils/useLanguageDirection.tsx @@ -0,0 +1,10 @@ +import { useRouter } from "next/router"; +import { rtlSupported } from "src/localization"; + +// This hook is used to determine the direction of the language +export function useLanguageDirection() { + const { query } = useRouter() + const isRtl = rtlSupported.includes(query.lang as string) + + return isRtl ? 'rtl' : 'ltr' +}